假设我有以下表格(仅作为示例):
vehicle: {n̲a̲m̲e̲, type}
vehicle_type: {n̲a̲m̲e̲} // has 'car' and 'ship'
person: {i̲d̲, age}
container: {i̲d̲, color}
现在我想在单独的表格中注明每年的天然气消耗量。但也有一些属性仅适用于汽车或船舶。让我们说汽车只能运输人员和船只运输集装箱。
现在我可以想到两种解决方案:
制作一张可以消耗所有属性的大桌子,虽然有些对于汽车或船只都没有意义。这些无效的属性会有-
之类的虚拟值,因为它们不能是null
:
consumption: {v̲e̲h̲i̲c̲l̲e̲_̲n̲a̲m̲e̲, y̲e̲a̲r̲, p̲e̲r̲s̲o̲n̲s̲, c̲o̲n̲t̲a̲i̲n̲e̲r̲s̲, liters}
创建两个表,增加复杂性,但只有有效的属性:
consumption_cars: {v̲e̲h̲i̲c̲l̲e̲_̲n̲a̲m̲e̲, y̲e̲a̲r̲, p̲e̲r̲s̲o̲n̲s̲, liters}
consumption_ships: {v̲e̲h̲i̲c̲l̲e̲_̲n̲a̲m̲e̲, y̲e̲a̲r̲, c̲o̲n̲t̲a̲i̲n̲e̲r̲s̲, liters}
在我的真实场景中,有更多的独占属性,所以在第二种情况下,我必须创建7个表。我还想到了消费表的is-a
关系,但是我想避免使用它,因为它在实践中不能很好地工作(至少那是我之前的经历)
有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
我建议将常用属性保持在一起,并将不同的属性分开:
consumption: {vehicle_name PK, year PK, liters}
transport_cars: {vehicle_name PK, year PK, persons}
transport_ships: {vehicle_name PK, year PK, containers}