Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 多对多对多关系_Database Design - Fatal编程技术网

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
...