2010-08-09 74 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