0
假设我有以下表(就像一个例子):如何在关系数据库模式中解决这种情况?
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}
在我真实的情景有更多的独占属性,所以在案例2中,我必须创建7个表格。我还想到消费表的is-a
关系,但我想避免它,因为它在实践中效果不佳(至少这是我以前的经验)。
有没有更好的方法来解决这个问题?