注意:此问题已于 2012 年 11 月 19 日重新表述以进行澄清。我通常在这里没有太多问题,但在为客户站点设计新产品系统时遇到了困难。我们提供一套产品,每位客户都可以出售给他的客户。我们可能随时添加新产品,但它们都遵循以下格式:
- 类别
- 类型
- 产品
举一个使用之前结构的真实示例:
- 棒球装备
- 手套
- 罗林斯
- 耐克
- 美津浓
- 蝙蝠
- 伊斯顿
- 路易斯维尔重击手
- 手套
- 足球装备
- 鞋
- 耐克
- 锐步
- 阿迪达斯
- 足球
- 耐克
- 树苗
- 威尔逊
……
- 鞋
上面的列表显然还在继续,可能会大得多,但它给出了整体思路。
目前,我将特定客户可以销售的产品类型存储在一个单一的平面格式表中,如下所示:
ID | clientID | categoryID | typeID | productID | customURL
=============================================================
1 | 111 | 1 | 1 | 1 | 1111
2 | 111 | 1 | 2 | 2 | 2222
3 | 111 | 1 | 2 | 3 | 3333
4 | 111 | 2 | 3 | 4 | 4444
5 | 222 | 1 | 1 | 1 | 5555
6 | 222 | 2 | 3 | 4 | 6666
- 在上面的示例中,类别 1 可以是“棒球装备”,类别 2 是“足球装备”
- 对应的 categoryID、typeID 和 productID 的名称将存储在具有 FK 关系的 3 个单独的表中(innodb),以保持规范化。
- 类型指的是二级物品(手套、球棒、鞋子、足球等)。这些数字永远不会相交(这意味着即使一般产品相同,也永远不会有相同的 typeID(棒球鞋的 ID 与足球鞋的 ID 不同)。
- 在此表中,clientID 1 可以销售 4 个产品,3 个在类别 1,1 个在类别 2。ClientID 2 可以销售 2 个产品,每个类别一个。
我倾向于使表格保持结构化,但知道在其他设计中我可能出于标准化目的将表格分开,我不确定是否适用于此。如果我把它们分开,我会看到这从一张桌子变成了 4 张或更多,如下所示:
产品提供表
ID | clientID | productID | customURL
======================================
1 | 111 | 1 | 1111
2 | 111 | 2 | 2222
3 | 111 | 3 | 3333
4 | 111 | 4 | 4444
5 | 222 | 1 | 5555
6 | 222 | 4 | 6666
产品定义表
ID | productID | typeID | productName
======================================
1 | 1 | 1 | rawlings glove
2 | 2 | 2 | product2
3 | 3 | 2 | product3
4 | 4 | 3 | product4
类型定义表
ID | typeID | categoryID | typeName
=====================================
1 | 1 | 1 | Gloves
2 | 2 | 1 | Bats
3 | 3 | 2 | Shoes
4 | 4 | 2 | Footballs
类别定义表
ID | categoryID | catName
=============================
1 | 1 | Baseball Equipment
2 | 2 | Football Equipment
我是不是想太多了?两种方法不是以相同的方式获得最终解决方案吗(后者只涉及几个连接来收集平面表,如图 1 所示)?