sql >> Databáze >  >> RDS >> Mysql

Cizí klíč MySQL používající více než jedno pole k odkazování na primární klíč z jiné tabulky

Nepoužívejte stejný sloupec pro oba cizí klíče. Někdy se tomu říká polymorfní asociace a porušuje pravidla dobrého návrhu databáze.

Mělo by být vodítkem, že jde o špatný návrh, že omezení FOREIGN KEY podporuje pouze jednu odkazovanou tabulku. Standardní SQL nepodporuje polymorfní asociace.

Místo toho vytvořte dva sloupce, jeden pro odkaz na uživatele a druhý pro odkaz na systémové procesy. Jeden sloupec na odkazovanou tabulku.

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

Pokud pro sloupec Uživatelé nebo Systémové procesy neexistuje žádný relevantní odkaz, použijte hodnotu NULL k označení, že neexistuje žádná použitelná hodnota.

Možná si budete chtít přečíst další otázky, na které jsem odpověděl o polymorfních asociacích .




  1. Nelze se připojit ke vzdálené databázi pomocí php

  2. Prosím o pomoc s SQLPLUS? Jak spustit SQLPLUS s počátečním nastavením DEFINE `OFF`?

  3. Sloučení hodnot JSONB v PostgreSQL?

  4. Chyba připojení Android java.lang.UnsupportedOperationException