不确定这类问题是否适合stackoverflow(我只是创建了一个帐号),但我会给它一个机会。如果合适,重定向我。我已经尝试了一些搜索这个场景,但老实说我不知道除了长篇文章之外如何描述它。我不确定是否有一些术语描述了我想要的东西。感谢。
我正在使用MySQL,但我认为这是一个普通的DB问题。我需要创建一组表,以便存储以下信息,不存在冲突,孤立或冗余的可能性。我已经用我认为会更普遍理解的类似数据取代了我的具体例子:
表格(仅包括重要字段):
有工人,每个工人都有职位属性,还有雇主
1)工人
2)职位
3)雇主
这些雇主可以包括任意数量的职位。雇主和职位之间存在多对多的关系(由链接表"标题"表示),但这些职位中的任何一个在不同的雇主中可能有不同的职位。因此,雇主和职位的任何组合都可能存在,具有该组合的特定标题。
标题
此外,任何工人都可以分配给任意数量的雇主。工人和雇主之间存在多对多的关系(由链接表"分配"表示),但工人只能被分配给拥有其职位头衔的雇主。所以我建立了链接表来链接工人和标题。
分配
这个设置类似于你是一个承包代理机构,其中有一组工人要外包,每个人都有不同的职位和资格等级,让我们说。然后你有一套雇主,每个雇主对这些职位使用不同的术语。当您将一名工人分配给雇主时,他们的职位是"必须匹配"位置"该雇主中的那个头衔。希望这不会让人感到困惑。
我尝试了不同的设置,但我总是想到一些可以想象冲突的空间(我想避免冗余,孤立的可能性,应用程序级别的验证或触发器)。以上是尝试创建最佳方案的最佳方法,但如果未插入/更新/删除记录,则表关系中存在分叉路由,可能导致给定SELECT查询的两个不同(冲突)结果正确。
e.g。作业中的记录可以将工人分配给与他/她的位置不匹配的标题。
考虑以下记录集:
工:
职位:
雇主:
标题
作业:
在这种情况下没有外键违规,我担心这种记录可能会进入数据库。在这种情况下,工作人员(WorkerID:1,PositionID:1)被分配给位于不同位置的标题(PositionID:2,EmployerID:1)。
我知道我可以在应用程序级别执行验证步骤,以确保没有冲突,但我想知道是否有一种方法来构建表和关系,而不是首先允许它。
感谢阅读。
答案 0 :(得分:0)
您是否可以添加表'资格'来将工作人员链接到标题?如果您尝试相关方案,那么与该复合键上的资格表绑定的“赋值”中的fk将失败。
我会在评论中提出这个问题,但我还没有足够的声誉,所以我不得不问答。