Tato data jsou normalizována
TABLE { FIELDS }
-----------------------------------------------------------------------
building { id, data }
floor { id, building_id, data }
room {id, floor_id, data }
bed {id, room_id, data }
Tato tabulka není (špatný nápad)
TABLE { FIELDS }
-----------------------------------------------------------------------
building { id, data }
floor { id, building_id, data }
room {id, building_id, floor_id, data }
bed {id, building_id, floor_id, room_id, data }
- V první (dobré) tabulce nemáte nepotřebná duplicitní data.
- Vložení v první tabulce bude mnohem rychlejší.
- První tabulky se snáze vejdou do paměti, což urychlí vaše dotazy.
- InnoDB je optimalizován s ohledem na model A, nikoli s modelem B.
- Poslední (špatná) tabulka obsahuje duplicitní data, pokud že se to nesynchronizuje, budete mít nepořádek. DB A can je mnohem těžší dostat mimo synchronizaci, protože data jsou uvedena pouze jednou.
- Pokud chci kombinovat data z budovy, podlahy, pokoje a postele budu muset zkombinovat všechny čtyři stoly v modelu A i modelu B, jak zde šetříte čas.
- InnoDB ukládá indexovaná data do vlastního souboru, pokud
select
pouze indexy , samotné tabulky nikdy nebudou být přístupný. Proč tedy duplikujete indexy? MySQL stejně nikdy nebude muset číst hlavní tabulku. - InnoDB ukládá PK v každém sekundárním indexu , se složeným a tedy dlouhým PK zpomalíte každý výběr, který používá index, a zvětšíte velikost souboru; pro žádný zisk.
- Máte vážný problém s rychlostí? Pokud ne, denormalizujete své tabulky?
- Ani nepřemýšlejte o použití MyISAM, který těmito problémy trpí méně, není optimalizován pro databáze s více připojeními a nepodporuje referenční integritu nebo transakce a pro tuto zátěž se nehodí.
- Při použití složeného klíče můžete vždy použít pouze pravou část klíče, tj. nemůžete použít
floor_id
v tabulcebed
jinak než pomocíid+building_id+floor_id
, To znamená, že možná budete muset použít mnohem více místa na klíče, než je potřeba v modelu A. Buď to, nebo budete muset přidat další index (který přetáhne celou kopii PK).
Ve zkratce
V modelu B vidím absolutně nulový přínos a spoustu nevýhod, nikdy jej nepoužívejte!