2016-07-07 25 views
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} 

现在,我要指出,每年的天然气消费量在一个单独的表。但是也有一些属性仅适用于汽车或船舶。假设汽车只能运输人员和船只运输集装箱。

现在有两个方案我目前能想到的:

  1. 对带有所有属性消耗一个大表,虽然有些不适合任何汽车或轮船意义。然后,这些无效的属性将有虚值一样-,因为他们不能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} 
    
  2. 让两个表,增加了复杂性,但只具有有效属性:

    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关系,但我想避免它,因为它在实践中效果不佳(至少这是我以前的经验)。

有没有更好的方法来解决这个问题?

回答

0

我会建议保持公共属性在一起,不同的属性分开:

consumption: {vehicle_name PK, year PK, liters} 
transport_cars: {vehicle_name PK, year PK, persons} 
transport_ships: {vehicle_name PK, year PK, containers} 
相关问题