sql >> Databasteknik >  >> RDS >> Mysql

Innehåll per användare:två tabeller med kolumner med samma namn eller sammanfogning?

Ett mycket ofta använt koncept i situationer som denna är genom att ha en användartabell och en posttabell, länka samman dem med en unik identifierare. Denna identifierare kan vara vad som helst - ett serialiserat id, ett användarnamn, e-postadress, etc - så länge den är unik. Länkning görs med hjälp av en främmande nyckel-begränsning. Exakt hur detta uppnås i MySQL vet jag inte, men i Postgres görs det så här:

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

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

Tabellerna slås sedan samman med en join. Detta kan göras på flera sätt, men här är en korskoppling efter infogning av några värden att leka med:

@> 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 i MySQL, men jag tror att konstruktionerna ovan kommer att fungera direkt.

(edit:Lade till INFOGA för förtydligande)



  1. Lägg till en genererad kolumn till en tabell i SQLite

  2. Hur man konverterar millisekunder till datum i SQLite

  3. MySQL-motsvarighet till Oracles SEQUENCE.NEXTVAL

  4. Vikten av WHERE 1 i MySQL-frågor