在数据库模型中排除某个数据子集的最佳设计实践是什么?

时间:2012-01-30 22:01:43

标签: sql sql-server-2008 database-design

情景。

我在数据库中有一个库架,库,用户,应用程序表。一个库架可以有许多库文件。我想将文件关联到每个应用程序下的用户。我可以使用UserXLibraryShelf表在一个应用程序下访问库文件。让我们说,而不是说用户可以使用哪些货架,我想说哪些货架不可用。大多数时候,除了应用程序3和5之外,用户可以访问所有的架子。我可以通过使用UserXNotAvailableShelf来实现这一点。但是这就像一个查找表,我不得不说这个用户带来NotAvailable表中不存在的所有货架。

在数据库设计中处理异常情况(排除而不是包含)的最佳做法是什么。

2 个答案:

答案 0 :(得分:2)

为“可用”和“不可用”提供(基础)表是一种完全可接受的设计选择,确保每个货架/用户通信都恰好进入其中一个表。然而,在更新密集型环境中可能存在这种设计的实际问题。附:您是否考虑过创建用户组,然后使用这些组对应的搁置?

答案 1 :(得分:0)

这通常使用MS-SQL中的角色来完成。例如,您创建一个VIEW或PROCEDURE,它排除某些货架值并将其分配给角色和包含所有货架的VIEW / PROC,并将其分配给另一个角色。然后将用户分配到适当的角色。