如何为每种产品类型设计数据库,所有产品类型或每个表的一个表?

时间:2011-11-28 15:27:27

标签: database database-design

我开始销售T恤和鞋子的新电子商务网络应用程序(宠物项目)。我的商店只有免费尺码的T恤,所以T恤只有彩色柱子,而鞋子有尺寸和颜色的柱子。

现在是时候创建用于存储数据的表了,我想知道为鞋子和T恤创建单独的表是否合适,或者最好将它们全部保存在一个表中?

如果您有更好的想法存储此类数据,请告知我们。

3 个答案:

答案 0 :(得分:10)

您绝对不想创建Shoe表和TShirt表。你的商店可能会成长,有一天你会有一千个这样的产品表。为此编写SQL将是一场噩梦。另外,你最终可能会有不同种类的T恤,有些有颜色,有些有尺寸和颜色,等等。如果你为每个人创建一个新表,你会很快忘记它们,如果你不这样做,为什么有单独的T恤和鞋子表,但不适用于单件T恤和多尺码t恤衫?

在设计数据库时,您应该问自己:我的领域中有哪些实体?什么是永不改变的东西,是唯一可识别的东西?在商店中,可以以特定价格出售的特定商品是一个这样的实体。因此,您可能有一个产品表,其中包含您销售的每个特定商品的密钥,可能还有名称,类型,尺寸和颜色列:

 item
 id | type | name     | size  | color
 ------------------------------------
 1  | shoe | Marathon | 9     | white
 2  | shoe | Marathon | 9     | black

看看这张表,你会注意到我们有两个非常成功的Marathon跑鞋的参赛作品,这似乎是一个规范化违规。实际上,您可能有两个实体可交付项目和目录产品。鞋子“马拉松”可能是你的商店里有一张图片和一张描述的东西,然后是“有以下颜色和尺寸:”系列。所以现在你有两个表:

product
id | type   | name        | supplier        | picture      | description
--------------------------------------------------------------------------------------
1  | shoe   | Marathon    | TrackNField Co. | marathon.jpg | Run faster than light!
2  | tshirt | FlowerPower | SF Shirts       | fpower.jpg   | If you're going to San Francisco...


item
id | product_id | size | color | price
--------------------------------------
1  | 1          | 9    | white | 99.99
2  | 1          | 9    | black | 99.99
3  | 2          |      | blue  | 19.99

产品表中的“类型”列可能很棘手。您可能希望按类别显示产品,让用户点击“鞋子”并获得所有类型为“鞋子”的产品。容易到目前为止,但最终有人会错误输入一个条目“sheo”,然后你再也找不到鞋子下的产品。因此,最好将分类与产品分开,例如通过使用product_type表:

product_type
id | name
---------
1  | shoe


product
id | type_id   | name        | supplier        | picture      | description
--------------------------------------------------------------------------------------
1  | 1         | Marathon    | TrackNField Co. | marathon.jpg | Run faster than light!

引用product表中的类型。只要您的类型层次结构保持浅薄,那就没问题,但如果您想要子类别,如“运动鞋”,“篮球鞋”,“绒面革鞋”等等,该怎么办?一双鞋甚至可能属于这些子类别中的几个。在这种情况下,你可以尝试这个

category
id | name         | supercategory_id
------------------------------------  
1  | shoe         |
2  | running shoe | 1


product_category
product_id | category_id
------------------------
1          | 2


product
id | name        | supplier        | picture      | description
--------------------------------------------------------------------------------------
1  | Marathon    | TrackNField Co. | marathon.jpg | Run faster than light!

如果你想显示多个分类层次(就像现在大多数大型电子商务网站一样),你就必须提出更复杂的东西。

答案 1 :(得分:4)

将它们全部保存在一个表格中并拥有type字段。这样做的原因是你的数据结构是可扩展的:即如果有一种新类型的产品,那么你只需使用同一个表并简单地添加一个新表而不是添加一个新表而不必大幅更改你的应用程序代码type

答案 2 :(得分:0)

如果您不想让它变得复杂,您可以将它们全部保存在同一个表中,并创建另一个名为“ProductType”的表,告诉您它是鞋子还是T恤。 在“ProductType”方面,这种关系将是One-To-Many,因为您可以将相同类型的产品与产品表(存储所有产品的地方)中的多条记录相关联。