Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Fremdschlüssel, der mehr als ein Feld verwendet, um auf einen Primärschlüssel aus einer anderen Tabelle zu verweisen

Verwenden Sie nicht dieselbe Spalte für beide Fremdschlüssel. Dies wird manchmal als polymorphe Assoziationen bezeichnet , und es verstößt gegen die Regeln eines guten Datenbankdesigns.

Es sollte ein Hinweis darauf sein, dass es sich um ein schlechtes Design handelt, dass eine FOREIGN KEY-Einschränkung nur eine referenzierte Tabelle unterstützt. Es gibt keine Unterstützung für polymorphe Assoziationen in Standard-SQL.

Erstellen Sie stattdessen zwei Spalten, eine für einen Verweis auf Benutzer, die andere für einen Verweis auf SystemProcesses. Eine Spalte pro referenzierter Tabelle.

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

Wenn es keine relevante Referenz für die Spalte Users oder SystemProcesses gibt, verwenden Sie NULL, um anzugeben, dass es keinen anwendbaren Wert gibt.

Vielleicht möchten Sie sich andere Fragen ansehen, die ich zu polymorphen Assoziationen beantwortet habe .