Сначала посмотрите документы по основным данным о связях . Используя ваш пример, рассмотрим что-то вроде:
- Сущность CarAttributeType с именем, например "вес в фунтах"
- Сущность CarAttribute со значением, например 2765.
- Объект Car с указанными вами необходимыми значениями (такими как "color", "make" и т. Д.)
Затем, между CarAttribute и CarAttributeType есть отношение «многие к одному» (многие CarAttribute могут иметь один и тот же тип), отношение «один ко многим» между Car и CarAttribute (каждая машина может иметь много атрибутов). Это решение немного сложнее в настройке, чем жестко запрограммированные поля NULL. Однако он избегает повторяющихся групп и, как мы надеемся, более удобен в обслуживании.
РЕДАКТИРОВАТЬ: Да, я пропустил это. Я думаю, что вы хотели бы StringCarAttribute, StringCarAttributeType, FloatCarAttribute, FloatCarAttributeType и т. Д. Затем, иметь много-к-одному между StringCarAttribute и StringCarAttributeType и т. Д. Автомобиль будет иметь один-к-другому с StratCarteCatCarteCarteCarCar Причина для сущностей с несколькими типами заключается в том, что у вас нет StringCarAttribute и FloatCarAttribute, оба заявляют, что используют один тип атрибута weight.
Наличие одного CarAttribute со всеми типами идет против 1NF # 4.