sql >> Database >  >> RDS >> Mysql

Kan een externe sleutel als primaire sleutel fungeren?

Natuurlijk. Dit is een veelgebruikte techniek die bekend staat als supertyping tafels. Net als in uw voorbeeld, is het idee dat één tabel een superset van entiteiten bevat en gemeenschappelijke attributen heeft die een algemene entiteit beschrijven, en andere tabellen subsets van die entiteiten met specifieke attributen bevatten. Het is niet anders dan een eenvoudige klassenhiërarchie in objectgeoriënteerd ontwerp.

Voor uw tweede vraag kan een tabel twee kolommen hebben die afzonderlijk refererende sleutels zijn voor dezelfde andere tabel. Wanneer de database de query opbouwt, wordt deze twee keer toegevoegd aan die andere tabel. Ter illustratie in een SQL-query (niet zeker van de MySQL-syntaxis, ik heb het al heel lang niet meer gebruikt, dus dit is specifiek de MS SQL-syntaxis), je zou die tabel twee verschillende aliassen geven bij het selecteren van gegevens. Zoiets als dit:

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

Dit neemt in wezen de student_rec tabel en combineert deze met de user_accounts tabel tweemaal, één keer op elke kolom, en wijst twee verschillende aliassen toe wanneer ze worden gecombineerd om ze van elkaar te onderscheiden.



  1. INNER of LEFT Meerdere tabelrecords in één rij samenvoegen

  2. Wat is het beste zoekalgoritme voor PHP &MYSQL?

  3. MySQL-jokerteken in select

  4. Een gegevensmodel voor dierenverzorging