Тези данни са нормализирани
TABLE { FIELDS }
-----------------------------------------------------------------------
building { id, data }
floor { id, building_id, data }
room {id, floor_id, data }
bed {id, room_id, data }
Тази таблица не е (лоша идея)
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 }
- В първата (добра) таблица нямате ненужни дублирани данни.
- Вмъкванията в първата таблица ще бъдат много по-бързи.
- Първите таблици ще се поберат по-лесно в паметта, ускорявайки заявките ви.
- InnoDB е оптимизиран с модел А, а не с модел Б.
- Последната (лоша) таблица има дублирани данни, if което излезе от синхрон, ще имате бъркотия. DB A не може е много по-трудно да се излезе от синхронизация, тъй като данните са изброени само веднъж.
- Ако искам да комбинирам данни от сградата, етажа, стаята и леглото ще трябва да комбинирам и четирите маси в модел А, както и модел Б, как спестявате време тук.
- InnoDB съхранява индексирани данни в свой собствен файл, ако
select
само индекси , самите таблици щеникога бъде достъпна. Тогава защо дублираш индексите? MySQL така или иначе никога няма да има нужда да чете основната таблица. - InnoDB съхранява PK във всеки вторичен индекс , със съставен и следователно дълъг PK, вие забавяте всеки избор, който използва индекс и увеличавате размера на файла; за никаква печалба каквото и да било.
- Имате ли сериозен проблем със скоростта? Ако не, вие денормализирате ли таблиците си?
- Дори не си и помисляйте да използвате MyISAM, който страда по-малко от тези проблеми, той не е оптимизиран за бази данни с множество обединения и не поддържа референтна цялост или транзакции и не съответства на това работно натоварване.
- Когато използвате съставен ключ, можете да използвате само най-дясната част на ключа, т.е. не можете да използвате
floor_id
в таблицаbed
различни от използването наid+building_id+floor_id
, Това означава, че може да се наложи да използвате много повече ключово пространство, отколкото е необходимо в Модел A. Или това, или трябва да добавите допълнителен индекс (който ще плъзга около пълно копие на PK).
Накратко
Виждам абсолютно нулева полза и много недостатъци в Model B, никога не го използвайте!