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

Ukládání nadbytečných cizích klíčů, aby se zabránilo spojení

Spojení jsou způsob, jakým fungují relační DBMS. Přečtěte si o normalizaci a používejte ji.

Pokud to platí pro každou službu, pak vaše databáze podléhá omezení. Jde o to, že (select service from Service_has_transaction join Transaction_has_wallet) je podmnožinou (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus) .

Většina SQL DBMS vám nedovolí vyjádřit toto omezení deklarativně a neví, jak optimalizovat jeho vynucení. Existuje však idiom SQL, který můžeme použít k vyjádření a deklarativnímu vynucení. (Hádejte podle definic stolu:) Nejprve přidejte bonus do Transaction_has_wallet a cizí klíč z Transaction_has_wallet (wallet, bonus) na Wallet_has_bonus . Poté přidejte sloupce peněženky a bonusů do Service_has_transaction a cizí klíč z Service_has_transaction (transaction, wallet, bonus) do Transaction . To přidává redundantní sloupce, ale přesto omezuje databázi na platné stavy, protože omezení cizího klíče brání tomu, aby byly redundantní hodnoty nesprávné. (Doufáme, že toto je motivační příklad pro učení o vyjádření libovolných omezení pomocí spouštěčů.)




  1. Proč nemůže easy_install najít MySQLdb?

  2. Systémové databáze SQL Server – Obnovení systémových databází

  3. 1054 – Neznámý sloupec „apa_calda“ v „klauzuli where“

  4. Jak OBJEDNAT PODLE SOUČTU() v MySQL?