首先,请参阅关系的核心数据文档。使用您的示例,请考虑以下内容:
- 一个 CarAttributeType 实体,其名称如“以磅为单位的重量”
- 具有诸如 2765 之类的值的 CarAttribute 实体。
- 一个 Car 实体,具有您提到的所需值(例如“颜色”、“品牌”等)
然后,CarAttribute 和 CarAttributeType 之间是多对一的关系(许多 CarAttributes 可以有相同的类型),Car 和 CarAttribute 之间是一对多的关系(每辆车可以有许多属性)。此解决方案的设置比硬编码的 NULL 字段要复杂一些。但是,它避免了重复组,并且希望更易于维护。
编辑:是的,我错过了。我想你会想要一个 StringCarAttribute、StringCarAttributeType、FloatCarAttribute、FloatCarAttributeType 等。然后,在 StringCarAttribute 和 StringCarAttributeType 等之间有一个多对一。Car 将与 StringCarAttribute 和 FloatCarAttribute 一对多。多个类型实体的原因是您没有 StringCarAttribute 和 FloatCarAttribute,两者都声明自己使用单个权重属性类型。
拥有一个包含所有类型的 CarAttribute 违反了 1NF #4。