Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Content-by-user:dwie tabele z kolumnami o tej samej nazwie czy połączenie?

Bardzo często stosowaną koncepcją w takiej sytuacji jest posiadanie tabeli użytkowników i tabeli postów, łącząc je ze sobą unikalnym identyfikatorem. Ten identyfikator może być dowolny — identyfikator serializowany, nazwa użytkownika, adres e-mail itp. — o ile jest unikalny. Łączenie odbywa się za pomocą ograniczenia klucza obcego. Nie wiem dokładnie, jak to się dzieje w MySQL, ale w Postgresie robi się to tak:

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

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

Tabele są następnie łączone za pomocą złączenia. Można to zrobić na kilka sposobów, ale tutaj jest sprzężenie krzyżowe po wstawieniu pewnych wartości do zabawy:

@> 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 w MySQL, ale myślę, że powyższe konstrukcje będą działać od razu.

(edycja:Dodano WSTAWKI dla wyjaśnienia)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracje Laravela/db:nasiona bardzo wolne

  2. Co to jest SQL? Co to jest baza danych? Systemy zarządzania relacyjnymi bazami danych (RDBMS) wyjaśnione w prostym języku angielskim.

  3. Wyrażenie SQL SELECT wartość wyrażenia ponowne użycie dla innego wyrażenia

  4. Pobieranie danych z mysql do StreamBuilder Flutter

  5. Generowanie kodów QR z wierszy MySQL