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

Ano*_*ous 3 database database-design

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

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

如果它有更好的存储这些数据的想法,请告诉我.

wal*_*orn 10

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

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

 item
 id | type | name     | size  | color
 ------------------------------------
 1  | shoe | Marathon | 9     | white
 2  | shoe | Marathon | 9     | black
Run Code Online (Sandbox Code Playgroud)

看看这张表,您会注意到我们有两个非常成功的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
Run Code Online (Sandbox Code Playgroud)

产品表中的"类型"列可能很棘手.您可能希望按类别显示产品,让用户点击"鞋子"并获得所有类型为"鞋子"的产品.容易到目前为止,但最终有人会错误输入一个条目"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!
Run Code Online (Sandbox Code Playgroud)

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

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!
Run Code Online (Sandbox Code Playgroud)

如果你想显示多个分类层次(就像现在大多数大型电子商务网站所做的那样),你将不得不想出更复杂的东西.