Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conteúdo por usuário:duas tabelas com colunas de mesmo nome ou junção?


Um conceito muito usado em situações como essa é ter uma tabela de usuários e uma tabela de postagem, vinculando-as com um identificador exclusivo. Esse identificador pode ser qualquer coisa - um id serializado, um nome de usuário, endereço de e-mail etc. - desde que seja exclusivo. A vinculação é feita usando uma restrição de chave estrangeira. Exatamente como isso é feito no MySQL eu não sei, mas no Postgres é feito assim:
CREATE TABLE users (
  id serial PRIMARY KEY,
  name text
);

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

As tabelas são então mescladas usando uma junção. Isso pode ser feito de várias maneiras, mas aqui está uma junção cruzada após a inserção de alguns valores para brincar:
@> 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 no MySQL, mas acho que as construções acima funcionarão imediatamente.

(edit:INSERTs adicionados para esclarecimento)