sql >> Databasteknik >  >> RDS >> Mysql

Kan en främmande nyckel fungera som en primärnyckel?

Självklart. Detta är en vanlig teknik som kallas supertyping tabeller. Som i ditt exempel är tanken att en tabell innehåller en superuppsättning av entiteter och har gemensamma attribut som beskriver en generell entitet, och andra tabeller innehåller delmängder av dessa entiteter med specifika attribut. Det är inte olikt en enkel klasshierarki i objektorienterad design.

För din andra fråga kan en tabell ha två kolumner som är separata främmande nycklar till samma andra tabell. När databasen bygger frågan ansluter den till den andra tabellen två gånger. För att illustrera i en SQL-fråga (osäker på MySQL-syntax, jag har inte använt den på länge, så detta är specifikt MS SQL-syntax), skulle du ge den tabellen två distinkta alias när du väljer data. Något så här:

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

Detta tar i huvudsak student_rec tabellen och kombinerar den med user_accounts tabell två gånger, en gång på varje kolumn, och tilldelar två olika alias när de kombineras för att skilja dem åt.



  1. Inkluderar MS SQL Servers mellan intervallgränserna?

  2. Återställer en misslyckad Rails-migrering

  3. Vad betyder INT(5) i mysql?

  4. PHP/MySQL-tidszonsförtydligande