2010-08-09 80 views
1

我在这个设计问题上遇到困难,希望能有所帮助。数据设计辩论

我有一个医生办公室,提供某些特权,目前只有5个特权,但可以添加更多特权。这些权限中的每一个都具有“是”或“否”的状态,但将来可能会有更细粒度的状态,并且这些权限中的每一个都与某个位置(呃,住院,门诊)相关,他们也可能在将来扩展。

因此,目前我有表OfficePrivileges,PrivilegeLocation,PrivilegeType,PrivilegeStatus。

OfficePrivilege是PrivilegeLocation和DoctorOffice之间的连接表。它具有OfficeID和PrivilegeLocationID的双主键。

有一次,我将类型和状态加入到OfficePrivileges表中,然后切换到让类型表成为位置和状态的子元素为子类型。它们都是单个主键表。

如果你在设计这套表格,你会怎么做?我在想,这几乎是一个层次问题。我恨他们。我想将编辑屏幕放在顶部具有位置的交叉表中,在侧面输入,细节为状态。这是它目前是如何在系统中,我试图整合,但它的一个COBOL和后端处理层次不是关系数据库更好....

编辑:以帮助清理混乱:

对于我的例子,有承认特权,参加特权,咨询特权和外科特权。这些地点是住院病人,急诊室,门诊病人和手术/手术。目前状态仅为是或否。但他们可能会根据客户的需求在未来发生变化。

此信息存储在我的数据库的表中。

+1

您可能会发现访问控制列表(ACL)很有趣。 – NullUserException 2010-08-09 14:59:19

+0

特权如何实际工作?是全部还是全无?或者某些用户是否只有只读权限?或编辑但不删除? – scunliffe 2010-08-09 15:00:54

+0

@scunliffe:我相信他在谈论医院特权。在医学界,如果医生可以将您送到特定的医院,那么该医生在该医院享有“特权”。 – AllenG 2010-08-09 15:06:30

回答

0

我认为这里最重要的事情是尽可能灵活,因为你知道“可能”的变化,但你并不真的想编码到那些。

喜欢的东西你有什么是真正可能不错:我走了这条路:你实际上就会有办事处,PrivilegeLocations之间的三方关系,PrivilegeTypes

我会说你OfficePrivaleges表格应具有以下6列:Id (its own PK), OfficeId, LocationId, PTypeId, StartDate, EndDate为Office授予新权限时,您将在该表格中添加一条记录,将这三条链接起来,并添加办公室在StartDate中具有特权的第一个日期。如果特权已被撤销,请将该日期添加到EndDate。如果它是re​​nabled,可以添加一个新行或重置StartDate

我会避免使PrivilegeType成为PrivilegeLocation的子级,因为那样您必须存储每个位置n次(n =不同的特权组合)。这样,您每次只能存储办公室,地点和类型。

所以,举例来说,一个医生可以有位置x住院权限,但只能在位置Y- DX成像的特权,而医生B可以在两个位置X具有住院特权和Y.

+0

所以我会在一开始将是我最好的选择的方式...... OfficePrivileges OfficeId LocationId PTypeId StatusId(而不是开始日期结束日期) 我可以让主OfficeId和LocationId的双排键?这样,每个办公室将只允许一个位置......当然,我也可以在我的代码中这样做。 – ecathell 2010-08-09 15:24:38

+0

@ecathell你可以做到这一点(或设置约束或任何数量的东西)。但那是否准确?例如,我的医生已经在至少两家(我认为是3家)当地的医院承认特权。 – AllenG 2010-08-09 15:43:58

+0

这只适用于一家医院的系统。此应用程序将专门针对单一医院。它适合医院而不是医生......呃......我是多余的:) – ecathell 2010-08-09 17:36:40