sql >> Databasteknik >  >> RDS >> Mysql

MySQL främmande nyckel använder mer än ett fält för att referera till en primärnyckel från en annan tabell

Använd inte samma kolumn för båda främmande nycklarna. Detta kallas ibland polymorfa associationer , och det bryter mot reglerna för bra databasdesign.

Det borde vara en ledtråd att det är en dålig design, att en FOREIGN KEY-begränsning endast stöder en refererad tabell. Det finns inget stöd för polymorfa associationer i standard SQL.

Skapa istället två kolumner, en för en referens till Användare, den andra för en referens till SystemProcesses. En kolumn per refererad tabell.

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

Om det inte finns någon relevant referens för varken kolumnen Användare eller Systemprocesser, använd NULL för att indikera att det inte finns något tillämpligt värde.

Du kanske vill recensera andra frågor jag har svarat på om polymorfa associationer .




  1. Konvertera tidssträng till decimaltimmar PHP

  2. Spårning av gilla-meddelanden på Facebook (DB Design)

  3. Laravel vältalig grupp enligt senaste skivan

  4. Skillnad mellan real_escape_string och prepare()?