我在做一个学校项目,我需要一些帮助。
我想创建三个表,其中应该包含以下字段:
用户UserID (AI,PK),UserEmail,UserPassword
WorkGroupMember GroupID(PK,FK WorkGroup) UserID (PK,FK用户)
WorkGroup GroupID (AI,PK),GroupFacilitator,GroupName
问题是,GroupFacilitator in WorkGroup实际上是UserID,它可以或者应该是外键吗?
谢谢
发布于 2014-04-03 11:14:56
另一种方法可能是在WorkGroupMember
中有一个名为IsGroupFacilitator
的字段(或对其函数进行适当描述的其他内容),默认情况下,不管您决定的是什么,都应该是no (如果它是一个数字类型,则可能是0),但是对于那些作为促进者的用户,可以将其设置为非零值(1被认为是传统的非零值)。这对我来说更有意义,因为作为一个促进者是WorkGroupMemeber
的一个属性。引用完整性是非常重要的,但它并不总是一个问题的正确答案,过多的引用会使您的DB变得过于复杂。
您发现了循环依赖的可能性,但这本身并不会造成问题:您只是简单地说,WorkGroupFacilitator
字段中WorkGroup
中的任何内容都必须首先存在于User
中,因此您的表填充顺序将是User
,然后是WorkGroup
,最后是WorkGroupMember
,这是合乎逻辑的。然而,即使您没有从User
到WorkGroup
的FK,这仍然是强制命令。
发布于 2014-04-03 10:41:20
是的,应该是外键。创建它将允许服务器优化查询的执行,加入工作组和treir促进者。
https://dba.stackexchange.com/questions/62441
复制相似问题