【发布时间】:2021-01-19 05:42:23
【问题描述】:
我定义了以下表格:
- Group
- GroupID (pk - int)
- ...
- Item
- ItemID (pk - int)
- ...
- Groups_Items
- GroupID (pk - int)
- ItemID (pk - int)
GroupID 上有一个 FK 链接到 Group 表,ItemID 上有一个 FK 链接到 Item 表。
我需要向 Groups_Items 表添加一个可选关系,即 RuleSetId
- Groups_Items
- GroupId (pk - int)
- ItemId (pk - int)
- RuleSetId (int - nullable)
规则集表定义如下:
- RuleSet
- RuleSetId (int)
- RuleId (int)
规则表定义如下:
- Rule
- RuleId (int)
- ...
当我尝试使用 RuleSet 表中的 RuleSetId 将 FK 添加到 Groups_Items 表中的 RuleSetId 时,它给了我一个错误,告诉我我不允许。
每个项目必须与一个组相关联,一个组可以有多个项目,但我想提供一个选项,允许一个或多个规则通过规则集与一个项目相关联。请注意,我不想将规则集直接关联到项目本身,而是关联到与组关联的项目,因为项目可能相同但关联到不同的组,并且可能会应用不同的规则集,具体取决于项目的组属于。
我希望这是有道理的。
我正在努力让它工作,所以我一定是设计不正确,但我不确定如何最好地解决这个问题。
更新 - 1
这是我想要实现的图表。请注意,我同时添加了 RuleSet 表,它只包含一个主键,即 RuleSetId
当我尝试在 GroupsItems 表和 RuleSet 表之间添加关系时出现以下错误:
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint
"FK_GroupsItems.ERuleSet". The conflict occurred in database
"MyDatabase", table "dbo.RuleSet", column 'RuleSetId'.
当我尝试在 RuleSet 表和 RuleSetRules 表之间添加关系时出现以下错误:
Unable to create relationship 'FK_RuleSetsRules.RuleSet'.
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint
"FK_RuleSetsRules.RuleSet". The conflict occurred in database "MyDatabase",
table "dbo.RuleSet", column 'RuleSetId.
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)的 SQL,并以表格式作为代码输入。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你所期望的内容,说出你所期望的内容和原因。
-
请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
-
@philipx - 为了清楚起见,由于我使用 SQL Server 图表来生成我的关系,因此没有代码可以提供。我列出了带有相关键和外键的表,并尽我所能解释了问题所在。 @Seanb 清楚地理解了我的问题并返回了一个可行的建议和代码,但我已经添加了我想要实现的图表以及发生的具体错误。无论如何,感谢您花时间解释。
-
ERD的内容可以以文本形式给出,该文本称为DDL,也是实现代码的一部分。我的 cmets 并非来自不了解您的问题,而是来自站点协议并希望帮助您获得答案。请注意,由于缺乏问题清晰度和信息,答案有一堆 cmets 和编辑。 PS请不要插入编辑/更新,只是让您的帖子成为编辑时最好的演示文稿。
标签: sql-server database-design many-to-many database-normalization