2017-04-06 41 views
0

我的數據庫中的一些用戶也是從業者。SQL數據庫設計 - 標誌還是新表?

這可以通過任一式表示:

  • 在用戶表中的標誌is_practitioner
  • 與user_id列

單獨從業表這是我不清楚哪種方法更好。標誌的

優點:

  • 更少的表每用戶
  • 只有一個ID(因此沒有可能混亂的,並且還沒有混亂,其中id來在其它表中使用)
  • 靈活性(I不需要確定字段是否僅僅是從業者)
  • 查找從業者的用戶級信息(例如電子郵件地址)的速度優勢
新表個

優點:

  • 在用戶表中沒有空
  • 更清晰,以什麼樣的信息屬於從業人員只有
  • 速度優勢尋找從業人員

在我的情況特別,,從業人員相關信息通常是一對多(如他們可以工作的地點,或他們可以工作的班次等)。如果輪到我需要爲從業者存儲簡單的屬性(即,一對一),我一點也不會感到驚訝。

問題

  1. 是否還有其他方面的考慮?
  2. 兩種方法哪一種更好?

回答

1

你可能要考慮的事實是,今天的人修煉是誰,是別的東西明天。 (而且,我不是故意的,不是的從業者)。說一個顧問,一個作者或者你的主題領域中的變體,你可能想要跟蹤他在Users表中的最新狀態。因此,有一個ProfType字段(職業類型)或同等學歷是有意義的。這樣,您就擁有了標誌的所有優點,您可以將其保留爲字符串字段並將其保留爲空白字符串,或者隨着您的需求增長填充其他Prof.Type代碼。

你提到,擁有一個新表格,對於找到從業者具有優勢。不,你最好用users表上的WHERE子句。

但是,您的最後一段(一對多)可能會使整個選擇偏向於單獨的表格。您可能還想要考慮可能的記錄數量,可能的增長,複雜查詢的重要程度等。

+0

謝謝您的回答。關於你的第一段,在任何情況下都不容易分別通過is_consultant標誌或Consultant表進行覆蓋?你爲什麼說WHERE子句更好?爲什麼許多一對多關係的存在使事物傾向於使用單獨的表格? –

+0

對於從業者來說,一面旗幟再次是一個顧問旗幟,您可以繼續爲每個教授類型添加標誌。在這種情況下,一個單獨的文本字段就可以完成同樣的工作。 從業者表格,另外一個諮詢顧問:假設你想找到從業者或顧問的用戶。這將是來自用戶與從業者和顧問的兩個左外連接。可能已經完成了,ProfType In('PRAC','CONS')。 一對多的性質:如果目標字段有其自己的屬性,請使用表格,否則使用字段。簡單的設置使用簡單的設計,複雜的綜合。 –

1

我試圖繪製兩個場景,在圖像內部有一些筆記。這真的只是一個草案,只是爲了幫助你「看到」各種實體。可能你已經做了這樣的事情:在這種情況下,請不要考慮我的答案。正如Whirl在他的最後一段所述,你也應該考慮其他的事情。

Draft logical schema

1

個人而言,我會去一個單獨的表 - 只要你已經可以識別一些額外的數據,只有一個醫生意義(例如:全職稱,大學,醫院或任何其他實體的從業者與之相關)。

因此,如果將來您發現更多的數據只對醫師有意義和/或識別用戶的另一個不同「子類型」(例如實習生),您可以將字段添加到實踐者子表或新表中爲實習生。

按照上面@Whirl Mind的建議使用用戶類型字段可能是有利的。

我認爲這是在你的數據庫來識別不同類型的對象只是一個例子,對於我指的是我以前在這裏的一個答案:Designing SQL database to represent OO class hierarchy