sql >> Database >  >> RDS >> Mysql

Externe MySQL-sleutel die meer dan één veld gebruikt om te verwijzen naar een primaire sleutel uit een andere tabel

Gebruik niet dezelfde kolom voor beide externe sleutels. Dit wordt soms polymorfe associaties genoemd , en het overtreedt de regels van een goed databaseontwerp.

Het zou een aanwijzing moeten zijn dat het een slecht ontwerp is, dat een FOREIGN KEY-beperking slechts één tabel waarnaar wordt verwezen ondersteunt. Er is geen ondersteuning voor polymorfe associaties in standaard SQL.

Maak in plaats daarvan twee kolommen, één voor een verwijzing naar Gebruikers, de andere voor een verwijzing naar Systeemprocessen. Eén kolom per tabel waarnaar wordt verwezen.

Logs
uid (INT)  UsersID (INT)  SystemProcessesID (INT) Action
1          2              NULL                    Jane Doe did this
2          1              NULL                    John Doe did that
3          1              1                       Hitman just killed John Doe

Als er geen relevante verwijzing is voor de kolom Gebruikers of Systeemprocessen, gebruikt u NULL om aan te geven dat er geen toepasselijke waarde is.

Misschien vind je het leuk om andere vragen te bekijken die ik heb beantwoord over polymorfe associaties .




  1. PostgreSQL unnest() met elementnummer

  2. PreparedStatement erg traag, maar handmatige zoekopdracht snel

  3. Rails over een bestaande database plaatsen

  4. Vermijd deze 4 veelvoorkomende DBA-fouten