Database design 多对多对多关系
我有一个问题,如果不进行水平扩展,在普通数据库中可能无法解决 我有一家商店,商店里有一种Database design 多对多对多关系,database-design,Database Design,我有一个问题,如果不进行水平扩展,在普通数据库中可能无法解决 我有一家商店,商店里有一种产品。比如一家服装店。您可以在颜色和大小之间选择尽可能多的门店。我现在称之为类型 这些表将如下所示: 产品 产品名称 ProductTypes ProductId TypeId1 TypeId2 价格 重量 股票 等.. 类型 TypeId 类型名称 由于TypeId1和TypeId2仍在同一个表中,因此未真正规范化。也许客户希望将10种类型分配给一个产品,从而有效地创建一个10D矩阵,其中包含类
产品
。比如一家服装店。您可以在颜色
和大小
之间选择尽可能多的门店。我现在称之为类型
这些表将如下所示:
产品
产品名称
ProductTypes
ProductId
TypeId1
TypeId2
价格
重量
股票
等..
类型
TypeId
类型名称
TypeId1
和TypeId2
仍在同一个表中,因此未真正规范化。也许客户希望将10种类型分配给一个产品,从而有效地创建一个10D矩阵,其中包含类型之间的所有关联,但是我必须为ProductTypes
表创建8个TypeId
这是否可以在不需要水平缩放的情况下正常化
例如,我有以下类型:Color
、Size
、Gender
和Shape
我需要能够说,主要产品衬衫的蓝色XL
男式
高领
没有存货,价格也发生了变化。但我需要能够动态地向产品添加更多类型
基本上我是在问,如何在rational数据库中存储5d数组查找。你的问题不清楚产品与产品类型是什么。听起来像是Product
是一种叶子类商品,类似于“Levi's 501牛仔裤”;Type
是一个轴,类似于“内接缝长度”、“腰围”或“颜色”;ProductType
是一种特殊的SKU,允许您跟踪“34Wx36L蓝色”而不是“30Wx36L黑色”
您只需要创建一个新表TypesToProductTypes
,其中包含ProductTypeId
列、TypeId
列和Value
列。然后,每个产品可以有任意数量的TypeID
假设我们想用“34Wx36L蓝色”和“30Wx36L黑色”来代表“李维斯501原版”:
产品
产品ID名称
--------- -------------------
1李维斯501原件
类型
类型ID名称
------ -------------
1色
2腰
3内接缝长度
商品种类表
ProductTypeId ProductId名称SKU#
------------- --------- --------------------------------- ---------
1 1李维斯501原装34Wx36L蓝色005011627
2 1李维斯501原装30Wx36L黑色005011660
类型停止产品类型
ProductTypeId类型ID值
------------- ------ ----------
1蓝色
1 2 34
1 3 36
2.1黑色
2 2 30
2 3 36
我使用您给定的表名使示例更容易理解,但您所称的Product
我将称之为CatalogItem,您所称的ProductType我将称之为SKU,您所称的Type我将称之为Attribute`。您已经接近了
你的桌子应该是这样的
Product
-------
Product ID
Product Name
Weight
Stock Number
...
产品ID是一个自动递增的整数,定义为主键(群集键)。我假设,根据您的设计,重量和库存数量属于产品。属于该项和类型的任何属性都可以移动到后面描述的ItemType表中
Type
----
Type ID
Type Name
Type Value
...
类型ID是一个递增的整数。类型ID和类型值组合为主键(集群键)
换句话说,(0,Size,S),(0,Size,M)等等。如果需要,可以将其分解为两个单独的表以进一步规范化。使用这个表可以更容易地直观地验证您的类型行
Item
----
Item ID
Product ID
SKU
Quantity On Hand
Price
...
Item ID是一个自动递增的整数,定义为主键(集群键)。产品ID是产品表的外键。此表定义了库存中的每种类型组合(每种唯一的项目)。例如,项目ID 16是一件男式衬衫(产品),蓝色(型号),XL(型号),SKU MD-14850639。这些类型属性一起出现在ItemType表中
ItemType
--------
Item ID
Type ID
...
项目ID和类型ID组合为主键(集群键)。一个项目可以有任意多个类型。然后如何将价格连接到类型1和类型2?这就是问题所在。你是说你需要知道哪一个是Type1
,哪一个是Type2
?就像我在我的示例中所说的,Type1和Type2现在是硬定义的,它们可以存在,也可以为空,但是要引入Type3
,我需要水平扩展表,这是一种糟糕的规范化实践。基本上,我需要能够创建一个3D/4D/5D/nD查找矩阵,每个轴上都有一个类型。(配置起来会很痛苦,但这不是重点)。@Rogier21:在这种情况下,我所做的编辑将满足您的要求。要么您不明白问题,要么我不明白答案:)但我需要存储N个类型之间的相关性。产品衬衫,颜色:蓝色,尺寸:L=价格5,00。产品衬衫颜色:蓝色,S号=价格6,00。也许将来我想添加第三种类型,例如形状。产品衬衫颜色为蓝色,S码,V形=价格7,00等。您对价格和库存的假设是错误的。如果蓝色产品卖完了怎么办?或者实际上是蓝色XL码男式衬衫?其中蓝色、XL码和男士都是。我该在哪里记录呢?我知道你做了什么是的,但做出选择将是一个相当大的挑战!我想我会做得很简单
Product
-------
Product ID
Product Name
Weight
Stock Number
...
Type
----
Type ID
Type Name
Type Value
...
Item
----
Item ID
Product ID
SKU
Quantity On Hand
Price
...
ItemType
--------
Item ID
Type ID
...