2013-05-06 18 views
0

我想存儲病人的現狀布爾臺SQL最好的辦法

  • 進入
  • 在身體護理
  • 高等醫學

什麼是存儲的最佳方法一個像這樣的布爾表?

我想

ID_STATUS INT 
ID_PATIENT INT 
ENTRY  BOOL 
BODY_TREATMENT BOOL 
HIGH_MEDICAL BOOL 

這是一個很好的辦法還是隻有一張桌子一樣需要以下?

ID_STATUS   INT 
ID_PATIENT  INT 
CURRENT_STATUS VARCHAR 
+1

沒有任何關於你的域名的知識,它是**不可能告訴**。 AFAIK,這些表格根本不兼容:它們完全不同。你必須知道你沒有告訴我們的東西。 (例如,'CURRENT_STATUS'是做什麼的?) – jpaugh 2013-05-06 17:01:07

+2

你已經出現了一段時間,並且以你目前的聲望,我甚至會問你這樣的問題,我很驚訝。你現在知道它是如何工作的,而且缺少這麼多的信息。 – phadaphunk 2013-05-06 17:12:22

+1

這些狀態是否爲_exclusive_? – 2013-05-06 17:37:30

回答

1

將您的CURRENT_STATUS存儲在查找表中。您可以使用代理鍵或不使用代理鍵。這是個人偏好,但應該跟隨數據庫其餘部分的外觀。

布爾列有點代碼味道。像這樣的「標誌」通常可以被重構爲更好的關係結構。在你的情況下,如果兩個狀態同時爲真,它會有意義嗎?

+0

ANSI SQL ***確實定義了布爾數據類型。我不同意他們是「代碼味道」。怎麼樣一個標誌'積極'?這是一個布爾列完全有效的用例。但我確實同意,狀態最好放在帶有外鍵約束的查找表中。 – 2013-05-06 17:16:42

+0

是的,我甚至在看到你的好評之前抽出了這部分內容。我看到布爾值在SQL:1999中添加爲可選(和可爲空)類型。然而,我同意Celko對布爾人的看法,我不能告訴你有多少次我問過另一個開發人員,「這個空標誌是什麼意思?」並得到了一個空白的目光。或者看到他們以OP首先建議的方式濫用。軟刪除的活動標誌通常可以更好地實現爲日期時間(如果它們是必需的(並且沒有其他可能的狀態),儘管我並不認爲它們是一種很好的歸檔方法。 – 2013-05-06 17:31:07

+0

我看到'bit' [被廢棄](http://books.google.com/books?id=W2Yi4TQaAjwC&pg=PA228&lpg=PA228&dq=celko+boolean&source=bl&ots=sH6MtlQLJg&sig=7PV-BL2IL7FHrOJDggMrykAbkfg&hl=en&sa=X&ei=A-eHUcnILcWs4AOf7oCQDQ&ved = 0CEQQ6AEwAg#v = onepage&q = celko%20boolean&f = false)在SQL:2003中。 – 2013-05-06 17:33:34

0

如果你不關心,當一個情況停止和下一個開始,你需要的是:

id_patient 
id_situation 

這當然是一個過於簡單化,因爲病人可以有一個以上的訪問和各訪問會有它自己的情況。