Te dane są znormalizowane
TABLE { FIELDS }
-----------------------------------------------------------------------
building { id, data }
floor { id, building_id, data }
room {id, floor_id, data }
bed {id, room_id, data }
Ta tabela nie jest (zły pomysł)
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 }
- W pierwszej (dobrej) tabeli nie masz niepotrzebnych zduplikowanych danych.
- Wstawki w pierwszej tabeli będą znacznie szybsze.
- Pierwsze tabele łatwiej zmieszczą się w pamięci, przyspieszając zapytania.
- InnoDB jest zoptymalizowany pod kątem modelu A, a nie modelu B.
- Ta ostatnia (nieprawidłowa) tabela zawiera zduplikowane dane, jeśli który nie jest zsynchronizowany, będziesz mieć bałagan. DB A nie może być znacznie trudniejsze do rozsynchronizowania, ponieważ dane są wymienione tylko raz.
- Jeśli chcę połączyć dane z budynku, piętra, pokoju i łóżka będę musiał połączyć wszystkie cztery stoły w modelu A i modelu B, jak tu oszczędzasz czas.
- InnoDB przechowuje zindeksowane dane we własnym pliku, jeśli
select
tylko indeksy , same stoły nigdy być dostępnym. Dlaczego więc duplikujesz indeksy? MySQL i tak nigdy nie będzie musiał czytać głównej tabeli. - InnoDB przechowuje PK w każdym indeksie wtórnym , ze złożonym, a tym samym długim PK, spowalniasz każdy wybór, który używa indeksu i zwiększa rozmiar pliku; bez żadnego zysku.
- Czy masz poważny problem z prędkością? Jeśli nie, to czy denormalizujesz swoje stoły?
- Nawet nie myśl o używaniu MyISAM, który mniej cierpi z powodu tych problemów, nie jest zoptymalizowany pod kątem baz danych z wieloma połączeniami i nie obsługuje integralności referencyjnej ani transakcji i jest słabym dopasowaniem do tego obciążenia.
- Używając klucza złożonego, możesz użyć tylko prawej części klucza, tj. nie możesz użyć
floor_id
w tabelibed
inne niż użycieid+building_id+floor_id
, Oznacza to, że być może będziesz musiał użyć znacznie więcej miejsca na klucze niż jest to potrzebne w modelu A. Albo to, albo musisz dodać dodatkowy indeks (który przeciągnie wokół pełnej kopii PK).
W skrócie
Widzę absolutnie zero korzyści i wiele wad w Modelu B, nigdy go nie używaj!