Mysql
 sql >> Base de données >  >> RDS >> Mysql

Contenu par utilisateur :deux tables avec des colonnes du même nom ou jointure ?

Un concept très souvent utilisé dans une situation comme celle-ci consiste à avoir une table d'utilisateurs et une table de publication, en les reliant avec un identifiant unique. Cet identifiant peut être n'importe quoi - un identifiant sérialisé, un nom d'utilisateur, une adresse e-mail, etc. - tant qu'il est unique. La liaison se fait à l'aide d'une contrainte de clé étrangère. Exactement comment cela est réalisé dans MySQL, je ne sais pas, mais dans Postgres, c'est fait comme ceci :

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

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

Les tables sont ensuite fusionnées à l'aide d'une jointure. Cela peut se faire de plusieurs manières, mais voici une jointure croisée après insertion de quelques valeurs avec lesquelles jouer :

@> 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 dans MySQL, mais je pense que les constructions ci-dessus fonctionneront immédiatement.

(edit :INSERTs ajoutés pour clarification)