sql >> Base de Datos >  >> RDS >> Mysql

Contenido por usuario:¿dos tablas con columnas del mismo nombre o unirse?

Un concepto que se usa con mucha frecuencia en una situación como esta es tener una tabla de usuarios y una tabla de publicación, vinculándolas con un identificador único. Este identificador puede ser cualquier cosa:una identificación serializada, un nombre de usuario, una dirección de correo, etc., siempre que sea único. La vinculación se realiza mediante una restricción de clave externa. No sé exactamente cómo se logra esto en MySQL, pero en Postgres se hace así:

CREATE TABLE users (
  id serial PRIMARY KEY,
  name text
);

CREATE TABLE posts (
  content text,
  user_id integer REFERENCES users(id) NOT NULL
);

A continuación, las tablas se fusionan mediante una unión. Esto se puede hacer de varias maneras, pero aquí hay una unión cruzada después de la inserción de algunos valores para jugar:

@> INSERT INTO users (name) VALUES ('James');
@> INSERT INTO users (name) VALUES ('Jones');
@> INSERT INTO posts (content, user_id) VALUES ('Hello from James.', 1);
@> INSERT INTO posts (content, user_id) VALUES ('Greetings from Jones.', 2);
@> SELECT U.id AS user_id, U.name, P.content \
   FROM users U, posts P \
   WHERE U.id = P.user_id;

 user_id | name  |        content
---------+-------+-----------------------
       1 | James | Hello from James.
       2 | Jones | Greetings from Jones.

YMMV en MySQL, pero creo que las construcciones anteriores funcionarán de inmediato.

(editar:Se agregaron INSERTOS para aclaración)