2013-10-15 20 views
2

我在数据库中的四个表:如何链接四个表避免多元关联

USER 
id 

PERMISSION 
id 

OBJECT 
id 

CONTEXT 
id 

现在的问题是,我想将它们连接到说,用户对一个一个或多个权限或许多对象取决于上下文..它看起来很简单,但我找不到一种方法来避免n元联合..

希望有人会友善地帮助我解决这个问题。 在此先感谢。

回答

0

你可能会寻找像一个WEAK ENTITY

基本上,一个弱实体是一个数据库实体不使自身的意义,但需要一个(或多个)外键承担适当的身份和意义。

这意味着您将从N元关系转换为N元二元关系。

一种可能的做法是这样的:让我们说,我们称之为弱实体Rules

Rules(id, user_id, permission_id, object_id, context_id /*other columns*/); 

每个强大的实体与规则表中的关系。我不太喜欢这种方法,但对于小数据集,它可能工作得很好。作为一般说明,尽管如此,我建议你更多地考虑一下你的数据库模型:你是否完全确信所有这4个实体之间有如此密切的关系?例如,“上下文”是否影响用户,对象和权限或只是权限?一个对象是否在多个上下文中同时存在,或者在特定的上下文中绑定对象(与变量作用域相同的概念)是有意义的?

+0

嗨,你建议不要做N元关联,我可以做N元二元关联。好的,但你建议创建一个包含四个对象的每个主键的连接表,所以它仍然是一个N- ary协会,不是吗? –

+0

好吧,是的,没有。现在它是一个具有N个二元关联的实体,而不是N个表之间的关系。我发现它们看起来很相似,但是用你目前的设计我看不到很多选择。 –