这是BestPractice的问题(或者至少我希望是这样)。
编辑:这个例子只是为了澄清问题。它可能是Person,Office,ContactInformation。
问题:
共有3个表格:
RightsSet
(
ID,
CanView,
CanEdit,
ObjectTypeID,
ObjectID
)
User
(
ID,
Username,
Password,
ProfileID
)
ProfileID
(
ID,
Name,
Description
)
用户和个人资料都可以拥有多个权限集。 RightsSet必须属于1(且仅1)用户或配置文件。
如何实现这一目标? 我应该创建其他表吗?
UserRightsSets
(
UserID,
RightsSetID
)
ProfileRightsSets
(
ProfileID,
RightsSetID
)
这个问题是: 如何确保删除ProfileRightsSet时,还会删除RightsSet(因为RightsSet属于配置文件并且仅限于配置文件)? 如何确保RightsSet只属于个人资料而不属于个人资料和用户?
或者,我可以修改RightsSet表
RightsSet
(
ID,
CanView,
CanEdit,
ObjectTypeID,
ObjectID,
UserID,
ProfileID
)
这个问题......好吧,如果多个对象共享RightsSet怎么办? (好吧,我想不出任何一个例子,但我确信有两种以上的实体共享一种实体的有效场景。)
答案 0 :(得分:2)
添加一个超类型Entity
表格,其中包含User
和Profile
(1:1
两种关系的子类型。
然后,让Entity
和RightsSet
处于1:n
关系。
答案 1 :(得分:1)
对我来说,这是一个艰难的过程,但你可能会考虑下面的结构:
Entity
---------
EntityId
ProfileId --nullable
UserId --nullable
RightsSet
----------
EntityId
CanView
CanEdit
ObjectTypeID
ObjectID
使用此方法,您可以在UNIQUE
表格中ProfileId
和UserId
指定Entity
约束,然后在RightsSet
中创建尽可能多的记录需要。当ProfileId
中的UserId
和Entity
都为空或者两者都有值时,可能存在两个问题。您可以在插入记录之前进行一些验证,以确保不会发生这种情况。