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



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

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

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

您肯定不希望创建一个Shoe表和一个TShirt表。你的商店可能会发展壮大,有一天你会有一千个这样的产品桌。为此编写SQL将是一场噩梦。另外,你最终可能会有不同种类的t恤,有些有颜色,有些有尺寸和颜色,等等。如果为每种t恤创建一个新表,就会很快失去对它们的跟踪,如果不这样做,为什么要为t恤和鞋子创建单独的表,而不是为单码t恤和多码t恤创建单独的表呢?

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

 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"列可能比较棘手。你可能想要按类别显示产品,让用户点击"鞋子",获得所有类型为"鞋子"的产品。到目前为止还很简单,但最终会有人打错"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!

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

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

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

最新更新