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

Czy klucz obcy może działać jako klucz podstawowy?

Oczywiście. Jest to powszechna technika znana jako nadpisywanie tabele. Tak jak w twoim przykładzie, pomysł polega na tym, że jedna tabela zawiera nadzbiór encji i ma wspólne atrybuty opisujące encję ogólną, a inne tabele zawierają podzbiory tych encji o określonych atrybutach. Nie różni się to od prostej hierarchii klas w projektowaniu zorientowanym obiektowo.

W przypadku drugiego pytania jedna tabela może mieć dwie kolumny, które są oddzielnie kluczami obcymi do tej samej innej tabeli. Gdy baza danych tworzy zapytanie, dwukrotnie dołącza do tej innej tabeli. Aby zilustrować to w zapytaniu SQL (nie jestem pewien co do składni MySQL, nie używałem jej od dłuższego czasu, więc jest to konkretnie składnia MS SQL), przy wybieraniu danych nadasz tej tabeli dwa różne aliasy. Coś takiego:

SELECT
    student_accounts.name AS student_name,
    counselor_accounts.name AS counselor_name
FROM
    student_rec
    INNER JOIN user_accounts AS student_accounts
      ON student_rec.student_number = student_accounts.user_id
    INNER JOIN user_accounts AS counselor_accounts
      ON student_rec.guidance_counselor_id = counselor_accounts.user_id

Zasadniczo zajmuje to student_rec tabeli i łączy ją z user_accounts tabeli dwa razy, raz w każdej kolumnie i przypisuje dwa różne aliasy podczas ich łączenia, aby je odróżnić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql sortuj według, najpierw null, a potem DESC

  2. Blokowanie poziomu wiersza w Mysql

  3. Partycjonowanie tabeli bazy danych w MySQL

  4. Jak wybrać dane, w których pole ma wartość minimalną w MySQL?

  5. Jak wyłączyć sprawdzanie klucza obcego w MySQL?