Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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/1/database/10.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/6/cplusplus/149.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
Mysql 具有多对多约束的库存数据库设计?_Mysql_Database_Database Design_Hierarchical Data - Fatal编程技术网

Mysql 具有多对多约束的库存数据库设计?

Mysql 具有多对多约束的库存数据库设计?,mysql,database,database-design,hierarchical-data,Mysql,Database,Database Design,Hierarchical Data,我正试图为一个简单的清单程序设计一个数据库体系结构 该存货将由箱子中的物品组成。框包含项目,并且是项目本身 我想box将是项的超级类型 我的主要问题是如何构造/约束框之间的关系,以便我仍然可以约束唯一的条件,即一个项目一次只能位于一个“位置” 我知道多对多关系应该让我知道哪些项目在哪些框中,但是其他框中的框又如何呢 例如: 方框A包含项目B和方框C框C包含项D 我如何设计一个系统,当我查找项D时,我会在框a和框C中找到它(如果我也能知道框之间的关系——后者在前者内部,那就太好了)。您可以使用表本

我正试图为一个简单的清单程序设计一个数据库体系结构

该存货将由箱子中的物品组成。框包含项目,并且是项目本身

我想
box
将是
项的超级类型

我的主要问题是如何构造/约束框之间的关系,以便我仍然可以约束唯一的条件,即一个项目一次只能位于一个“位置”

我知道多对多关系应该让我知道哪些项目在哪些框中,但是其他框中的框又如何呢

例如:
方框A
包含
项目B
方框C
<代码>框C
包含
项D


我如何设计一个系统,当我查找
项D
时,我会在
框a
框C
中找到它(如果我也能知道框之间的关系——后者在前者内部,那就太好了)。

您可以使用表本身的自我关系。您可以在数据库设计中提及以下列:

ItemId(PK)
ItemName
ItemType(Can be B for Box and I for item)
ItemContainer(Will contain ItemId from this table itself and will be null if it is not present in any box, if required add check constraint that if itemType is I then it cannot be null)
您可以将数据放置为:

ItemId      ItemName      ItemType     ItemContainer
  1         BoxA             B            (null)
  2         BoxB             B               1
  3         ItemA            I               2
由于ItemId是主键,所以,数据库将只允许每个项有一行,因此,它将只在一个框中可用


检查此设计是否有帮助…

您是否可以将方框作为项目进行设计?在这种情况下,您可以使用Item(PK、FKParent、Type),其中FKParent将约束到PK。您可以指定Box或Item的类型。您的语句“这样我仍然可以约束唯一的条件,即一个项目一次只能在一个“位置”似乎与示例相矛盾,我如何设计一个系统,当我查找项目D时,我会在框a和框C中找到它。请您提供更多详细信息。@codeLover对任何混淆表示歉意。当我写一个“地方”时,我的意思是一件物品不能放在多个盒子里,除非其中一个盒子在另一个盒子里。在我给出的示例中,
项D
位于
框A
框C
内,但这是允许的,因为
框C
位于
框A
内。这说明了吗?这似乎很有希望,但似乎允许递归位置。也就是说,
BoxA
可以有
ItemContainer=1
BoxB
可以有
ItemContainer=2
。您能重新表述您的担忧吗