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

Návrh DB:tabulka členů oddělená nebo vše v jedné tabulce?

Hodně záleží na tom, jaké jsou ty "jiné" detaily. To je častá a zajímavá otázka a na první pohled neexistuje žádná „tvrdá a rychlá“ odpověď. Pokud však o problému přemýšlíme abstraktněji, o skutečném vztahu mezi atributy („detaily“) jakékoli konkrétní věci, kterou chcete reprezentovat, můžeme najít určitou jasnost.

Ve svém dotazu uvádíte, že přátelé mají „minimální“ a „jiné“ detaily. Spíše než klasifikovat tyto detaily jako "minimální" nebo "jiné", pojďme je klasifikovat podle toho, zda jakýkoli jednotlivý ("atomový") detail může být plně určen tím, co dělá přítele jedinečným.

Předpokládám, že existuje nějaký primární klíč (PK), jako FriendID nebo e-mailová adresa nebo tak něco. S ohledem na tento jedinečný identifikátor se zeptejte sami sebe:„Pokud dostanu přesně jedno FriendID (nebo e-mail nebo cokoli, co používáte jako PK), jakými podrobnostmi o tomto příteli jsem si naprosto jistý? Např. znát jméno, příjmení a datum narození tohoto přítele, ale já nevím absolutně znát telefonní číslo toho přítele, protože jich je více.

Seskupte do jedné tabulky všechny detaily, které jednoznačně znáte vzhledem k PK. Údaje, pro které potřebujete více údajů (jako „domov“ nebo „práce“ v případě telefonních čísel), vložte do tabulek „dítě“ s cizím klíčem zpět do „rodičovské“ tabulky na PK. (Poznámka:Je velmi pravděpodobné, že PK podřízené tabulky bude složená; to znamená, že se bude skládat z PK nadřazené tabulky a rozlišovacího faktoru (jako v tomto příkladu „domov“ nebo „práce“). Složené klíče pro mnohostranné z 1-M vztahů jsou velmi dobré.)

Databázoví nadšenci nazývají tento rozklad na základě funkčních závislostí .



  1. Chyba při pokusu o migraci postgresql db na mysql s workbenchem

  2. mysql vyberte skupinu součtu podle data

  3. Z uložené procedury vraťte parametr OUT a kurzor OUT a výsledek analýzy (Oracle)

  4. PostgreSQL funkce pro poslední vložené ID