我制作了基本车辆年/制造/模型/子模型数据库图here。我很难绕过如何进一步设置我的数据库,以便产品知道他们所属的车辆。
我认为我需要创建另一个表,作为Products和VehicleYears之间的多对多关系。
基本上我希望能够在前端选择车辆,并且只显示适合当前所选车辆的产品。
这会带来另一个可能的问题。如果车辆年份与产品有很多关系,我是否仍能根据当前选定的车辆过滤出类别和/或子类别? (产品属于属于类别的子类别)
我确信有一种方法可以编写查询来处理类别和子类别,但有没有更好的方法来构建数据库,以便性能不成问题?我的类别/项目图表为here。
答案 0 :(得分:1)
是的,从理论上讲,您需要一个从VehicleYears到Products的中间表。
但我不明白你的VehicleYears和VehicleYears_VehicleMakes表。 VehicleYears_VehicleMakes关系意味着什么?供应商那年制造了什么车? 我认为这种关系相当于一个子模型到年份,如果是这样,你甚至不需要一个表多年,只需将两列放入子模型表中。
答案 1 :(得分:1)
尼克,第一件让我感到震惊的是你需要忘记将年份建模为一个单独的表格。因此,请删除VehicleYears
和VehicleYears_VehicleMakes
。您只需在VehicleSubModels
表中添加年份字段即可。我认为年份更好地与车辆的子模型相关联,而不是车辆制造。
我认为您在车辆和产品之间难以找到的链接很多:VehiclSubmodels
和Items
之间很多。您的新表格VehicleProducts
将包含两个字段(复合主键),其中包含VehicleSubModelId
和ItemId
。
通过这种方式进行建模,您可以通过非常精细的方式将产品与车辆相关联。您可以轻松实现选择车辆并列出所有相关项目的目标。
您对类别和子类别的设计很好,但我想知道您是否会达到需要第三级分类的点 - 一个SubSubCategory :)如果是这样的话,现在咬住子弹可能是明智之举在你的设计中。
答案 2 :(得分:0)
我为发布商尝试将修复程序附加到产品上做了类似的事情。该产品由四部分主键识别:年份,品牌,型号,引擎或YMME,车辆表格如下(简化):
VEHICLES
year integer
make varchar
model varchar
engine varchar
PARTS表必须链接到VEHICLES表中的实体。部件可能适用于特定年份和品牌和型号,但不适用于安装特定引擎的情况。
在您的情况下,您必须确定哪些属性星座唯一标识自行车。如果您正在跟踪多个制造商的自行车,则需要MAKE。如果情况每年都在变化,那么你需要YEAR。如果模型之间存在差异,则需要MODEL。例如,如果框架是铝制的,那么一个部件可以工作,但如果框架是钢制的,那么你也需要FRAME_MATERIAL或FRAME_GAUGE代替ENGINE,或者你需要一个单独的铝模型,另一个对于钢铁。
VEHICLES
year
make
model
frame
然后你可以简单地有一个中间表:
VEHICLE_PARTS
partid integer foreign key references PARTS
year
make
model
frame
...
或
VEHICLE_PARTS
partid integer foreign key references PARTS
year
make
model (frame material is handled by a separate model)
你的结构必须回答这个问题:这部分是否适用于那辆自行车?仅仅存在VEHICLE_PARTS表中的partid应该意味着,是的。你真的想避免在VEHICLE_PARTS表中有一个Exceptions字段,其中有一些人类可读的符号表示当使用rams-horn车把时该部件与有问题的自行车不兼容。你应该真正创建一个单独的模型来处理这样的事情。