不要让每个品牌都有自己的桌子.那不是规范化,而是分区.在数据库很大之前,不要这样做.
目前尚不清楚您的品牌表是什么意思.我猜你的意思是零件制造商,但我不确定.本讨论的其余部分假定您确实是零件制造商.
这是我的建议.
重命名品牌表.将其称为“制造商”,并将其分为两部分,分别用于制造商和联系方式.
制造商:
mfrid (your four letter code, primary key)
mfrname text
mrflogo varchar(20)
mfrwebsite varchar(30)
mfrphone varchar(20)
warehouse varchar(20)
联系:
mfrid (four letter code) (part of primary key)
contactid (autoincrement) (part of primary key)
contact_name text
contact_number varchar(20)
contact_email varchar(30)
bio varchar(300)
为什么“定价”是制造商的属性?您所说的“定价”是什么意思?它不是单个零件的属性吗?
将零件表一分为二.一张桌子的每个部分sku都有一行.另一个将为每个应用程序(即可以使用该零件的汽车的每个品牌和型号)都有一个表格.像这样:
SKU:
sku (your stock-keeping unit number, primary key).
mfrid (maker of the PART, not the vehicle in which it fits, foreign key to mfr table).
mfrsku (the brand's stock keeping unit, not necessarily unique in your system)
category (e.g. Brakes)
subCategory (e.g. Brake Rotors)
details (e.g. Drilled and Slotteed 'Razr')
description (Paragraph on part describing it)
saleprice (?)
cost (?)
应用:
ApplicationID (auto incrementing primary key)
make (e.g. Subaru)
model (e.g. Impreza)
subModel (e.g. WRX STi)
firstYear.
lastYear.
然后,您将需要一个联接表(因为每个应用程序可以具有零个或多个SKU,反之亦然;也就是说,您的SKU和应用程序实体可以具有多对多关系).在您的示例中,您知道Subarus的多个模型通常具有相同的部分.这种模式可以做到这一点.
应用程序SKU:
ApplicationID
SKU
规范化的技巧是了解您的应用程序域.弄清楚您拥有哪些实体:
>制造商,如Delco和Subaru
>与乔和哈利等人联系
>零件,例如左前雨刮器总成和后雨刮器总成
>应用,例如1999-2006年斯巴鲁森林人和1998-2007年斯巴鲁翼豹
创建一个与您拥有的每个实体匹配的表.弄清楚如何唯一地标识每个实体(换句话说,弄清楚将用于主键的内容).
当实体之间有多对多关系时,请创建联接表.
创建外键以将各个实体连接在一起.
我希望这有帮助.