sql >> Databáze >  >> RDS >> Mysql

Může cizí klíč fungovat jako primární klíč?

Samozřejmě. Toto je běžná technika známá jako supertyping tabulky. Jako ve vašem příkladu jde o to, že jedna tabulka obsahuje nadmnožinu entit a má společné atributy popisující obecnou entitu a další tabulky obsahují podmnožiny těchto entit se specifickými atributy. Není to nepodobné jednoduché hierarchii tříd v objektově orientovaném designu.

Pro vaši druhou otázku může mít jedna tabulka dva sloupce, které jsou samostatně cizími klíči ke stejné druhé tabulce. Když databáze vytvoří dotaz, připojí se k druhé tabulce dvakrát. Pro ilustraci v dotazu SQL (nejsem si jistý syntaxí MySQL, dlouho jsem ji nepoužíval, takže se jedná konkrétně o syntaxi MS SQL), při výběru dat byste této tabulce dali dva odlišné aliasy. Něco jako toto:

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

To v podstatě vyžaduje student_rec a zkombinuje ji s user_accounts tabulka dvakrát, jednou v každém sloupci, a při jejich kombinování přiřadí dva různé aliasy, aby je bylo možné odlišit.



  1. WampServer - mysqld.exe nelze spustit, protože chybí MSVCR120.dll

  2. Jak nahradit ID oddělení oddělená čárkami jejich jménem?

  3. Recursion On Database Query k získání hierarchického výsledku pomocí Hibernate - Java

  4. MySQL klenot na OSX 10.7 Lion