Не, това е лош дизайн за релационна база данни. Това е пример за Entity-Attribute-Value дизайн. Той е гъвкав, но нарушава повечето правила за това какво означава да бъдеш релационна база данни.
Преди да се спуснете в дизайна на EAV като решение за гъвкава база данни, прочетете тази история:Лош CaRMa .
По-конкретно, някои от проблемите с EAV включват:
- Не знаете какви атрибути съществуват за даден ID_NUM, без да правите заявка за тях.
- Не можете да направите нито един атрибут задължителен, еквивалент на NOT NULL.
- Не можете да използвате ограничения на базата данни.
- Не можете да използвате SQL типове данни;
value
колоната трябва да е дълъг VARCHAR. - По-специално в MySQL, всеки VARCHAR се съхранява на собствена страница с данни, така че това е много разточително.
Заявките също са невероятно сложни, когато използвате дизайна на EAV. Magento, платформа за електронна търговия с отворен код, използва широко EAV и много потребители казват, че е много бавен и труден за запитване, ако имате нужда от персонализирани отчети.
За да бъдете релационни, трябва да съхранявате всеки различен атрибут в отделна колона, със собствено име и подходящ тип данни.
Написах повече за EAV в моята презентация Практически обектно-ориентиран Модели в SQL и в моя публикация в блога EAV FAIL , а в моята книга SQL Antipatterns:Избягване на клопките на програмирането на бази данни .