Database 如何设计数据库,一个表用于所有产品类型,或者每个表用于每个产品类型?

Database 如何设计数据库,一个表用于所有产品类型,或者每个表用于每个产品类型?,database,database-design,Database,Database Design,我启动了一个新的电子商务web应用程序(pet项目),既销售t恤衫,也销售鞋子。我的商店只有免费尺码的T恤,所以T恤只有颜色栏,而鞋子有尺码和颜色栏 现在是创建表来存储数据的时候了,我想知道为鞋子和t恤创建单独的表是好还是最好将它们都放在一个表中 如果它有更好的方法来存储这些数据,请告诉我。将它们都保存在一个表中,并有一个类型字段。这样做的原因是为了使您的数据结构具有可伸缩性:即,如果有一种新类型的产品,则无需添加新表和大幅更改应用程序代码,您只需使用同一个表,只需添加一个类型,如果您不想让它变

我启动了一个新的电子商务web应用程序(pet项目),既销售t恤衫,也销售鞋子。我的商店只有免费尺码的T恤,所以T恤只有颜色栏,而鞋子有尺码和颜色栏

现在是创建表来存储数据的时候了,我想知道为鞋子和t恤创建单独的表是好还是最好将它们都放在一个表中


如果它有更好的方法来存储这些数据,请告诉我。

将它们都保存在一个表中,并有一个
类型
字段。这样做的原因是为了使您的数据结构具有可伸缩性:即,如果有一种新类型的产品,则无需添加新表和大幅更改应用程序代码,您只需使用同一个表,只需添加一个
类型

,如果您不想让它变得复杂,您可以将它们都放在同一个表中,并创建另一个名为“ProductType”的表,告诉您它是鞋还是t恤。
“ProductType”方面的关系将是一对多的,因为您可以将同一类型的产品与产品表(存储所有产品的地方)上的多个记录关联起来。

您肯定不想创建鞋表和t恤表。你的商店可能会发展壮大,总有一天你会有上千张这样的产品表。为此编写SQL将是一场噩梦。另外,你最终可能会有不同种类的t恤,一些有颜色,一些有尺寸和颜色,等等。如果你为每件t恤都创建了一个新的表格,你会很快忘记它们,如果你不这样做,为什么要为t恤和鞋子设置单独的表格,而不是为单码t恤和多码t恤设置单独的表格

在设计数据库时,您应该问问自己:我的领域中的实体是什么?什么是永远不会改变且唯一可识别的事物?在商店里,可以以特定价格出售的特定商品就是这样一个实体。因此,您可能有一个products表,其中包含您销售的每个特定商品的键,还可能有名称、类型、大小和颜色列:

 item
 id | type | name     | size  | color
 ------------------------------------
 1  | shoe | Marathon | 9     | white
 2  | shoe | Marathon | 9     | black
看看这张表,你会注意到我们有两个非常成功的马拉松跑鞋的条目,这似乎违反了规范。实际上,您可能有两个实体:可发货项和目录产品。“马拉松”鞋可能在你的店里有一张图片和一个描述,然后是“以下颜色和尺寸可选:”系列。现在有两个表:

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
product表中的“type”列可能很棘手。您可能希望按类别显示产品,让用户单击“shoes”并获取所有类型为“shoe”的产品。到目前为止很容易,但最终有人会错误地输入一个条目“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!
参考产品表中的类型。只要您的类型层次结构保持较浅,就可以了,但如果您想拥有子类别,如“运动鞋”、“篮球鞋”、“绒面革鞋”等等,该怎么办?一只鞋甚至可能属于其中几个子类别。那样的话,你可以试试这个

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!
如果你想显示多层次的分类(就像现在大多数大型电子商务网站所做的那样),你必须想出更复杂的方法