Nie, to zły projekt dla relacyjnej bazy danych. To jest przykład Entity-Attribute-Value projekt. Jest elastyczny, ale łamie większość zasad tego, co oznacza bycie relacyjną bazą danych.
Zanim przejdziesz do projektowania EAV jako rozwiązania dla elastycznej bazy danych, przeczytaj tę historię:Zła CarMA .
Mówiąc dokładniej, niektóre problemy z EAV obejmują:
- Nie wiesz, jakie atrybuty istnieją dla danego ID_NUM bez zapytania o nie.
- Nie możesz uczynić żadnego atrybutu obowiązkowym, odpowiednikiem NOT NULL.
- Nie możesz używać ograniczeń bazy danych.
- Nie można używać typów danych SQL;
value
kolumna musi być długim VARCHAR. - Szczególnie w MySQL, każdy VARCHAR jest przechowywany na własnej stronie danych, więc jest to bardzo marnotrawne.
Zapytania są również niezwykle złożone, gdy używasz projektu EAV. Magento, platforma e-commerce typu open source, intensywnie korzysta z EAV, a wielu użytkowników twierdzi, że jest bardzo powolna i trudna do wyszukania, jeśli potrzebujesz niestandardowych raportów.
Aby być relacyjnym, powinieneś przechowywać każdy inny atrybut w osobnej kolumnie, z własną nazwą i odpowiednim typem danych.
Więcej o EAV napisałem w mojej prezentacji Praktyczne zorientowane na obiekt Modele w SQL oraz w moim poście na blogu Niepowodzenie EAV oraz w mojej książce Antywzorce SQL:unikanie pułapek programowania baz danych .