在数据库中存储年份/品牌/型号?

时间:2010-06-17 02:54:10

标签: database-design

这就是我的想法(原谅Django格式):

class VehicleMake(Model):
    name = CharField(max_length=50)

class VehicleModel(Model):
    make = ForeignKey(VehicleMake)
    name = CharField(max_length=50)

class VehicleYear(Model):
    model = ForeignKey(VehicleModel) # or ManyToManyField
    year = PositiveIntegerField()

这将在那些偶然的下拉选择框中使用,这些选择框在视觉上可以像[- Year -][- Make -][- Model -]那样布局。因此,要查询我需要的数据,我首先必须从years表中选择所有 distinct 年,按降序排序。然后我会发现那一年制造了模型的所有车辆制造商。然后是那一年所有的模型。这是一个很好的方法吗,或者我应该以某种方式重新安排外键?或者在多年/模型中使用多对多表格,以便不再重复一年?

3 个答案:

答案 0 :(得分:1)

我不是专家,但我认为它会是这样的?

class VehicleModel( Model ):
    name = CharField( max_length=50 )
    year = PositiveIntegerField()
    manufacturer = ForeignKey( VehicleManufacturer )

class VehicleManufacturer( Model ):
    name = CharField(max_length=50)

年份不需要单独的类/表,只需直接插入即可。虽然我没有想到所有的可能性,但你能否告诉我这是否合适?

答案 1 :(得分:1)

我可能过度简化了这一点,但是有一个简单的表格,包括品牌,型号和年份有什么问题?是的,make字符串将在每一行中重复,但实际上 - 您希望在该表中有多少行?

class Vehicle( Model ):  
    name = CharField( max_length=50 )  
    year = PositiveIntegerField()  
    model = CharField( max_length=50 )  

答案 2 :(得分:1)

我会选择:

  class VehicleModel( Model ): 
    name = CharField( max_length=50 ) 
    first-year = PositiveIntegerField()
    last-year = PositiveIntegerField() 
    make = ForeignKey( make ) 

class Make( Model ): 
    name = CharField(max_length=50) 
    manufacturer = ForeignKey( VehicleManufacturer ) 

class VehicleManufacturer( Model ): 
    name = CharField(max_length=50) 

这应该允许你在“General Moters”下将Buick,Chevrolet,Cadilac等分组

另外我认为你的UI逻辑有点缺陷, 这听起来像是一个“向右走”菜单的工作,也就是说,您需要所有制造商的下拉菜单,当选择特定的制造商时,您可以提供模型的子菜单,当选择模型时,您可以预设一个多年的子菜单。

另外,只要选择了新的制造商,就应该编辑“模型”选择的内容,然后每当选择模型时,都应该更新年份选择。

如上所述,您的UI将允许我输入“Studebaker”“Model T”“2010”