我开始新的电子商务网站应用程序(宠物项目),销售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"方面的关系将是一对多的,因为您可以将相同类型的产品与产品表(您存储所有产品的地方)上的多个记录相关联