2013-01-06 47 views
2

我剛加入這個網站,這是我的第一個問題,我希望我的問題是根據StackOverflow問題政策。SQL - 使用分層模型設計電話簿數據庫(主客戶端)

我設計的電話簿中的DB它具有以下能力

  • 聯繫有2種類型(公司或個人) - > ContactType
  • 我想每個聯繫人有儘可能多的電子郵件,電話號碼和地址。
  • 我想指定哪個人的作品在公司,所以我不僅能顯示一個公司聯繫的細節也是其僱員和他們在公司工作和他們的聯繫人列表(CoEmpJob表)

我設計了一個在下面的鏈接中顯示的數據庫圖表,它是否結構良好,還是可以通過更好的方式實現我想要的結果?

在此先感謝。

My Phone Book Design

+1

獲取「數據模型資源手冊」的副本。它具有類似案例的解決方案,完整記錄。電話簿是我認爲50頁左右,與地址等 – TomTom

回答

0

隨着設計的代表,你錯過了一些東西,比如一個公司表和ContactTypes表。 CoEmpJob表中似乎沒有鏈接到「聯繫人」表的外鍵。

在電話表中,我個人不會使用前綴字段(除非您希望通過電話前綴顯示聯繫人),在這種情況下,每個電話號碼都保證是唯一的,在這種情況下PhoneNum字段會變成主鍵和PhoneID字段是不必要的 - 但您可能會遇到夫妻在同一個數據庫中的情況;雖然他們幾乎可以肯定有不同的手機號碼,但他們幾乎可以確定擁有同一家庭電話號碼在這種情況下,你的設計是正確的。

我不知道有多少人擁有多個地址(我認爲很少有,如果有的話),這意味着地址表的字段可以移動到聯繫人表中。

(新增) 至於企業,你要是要指定哪個人的作品,其中公司,那麼你就需要一個公司表(丟失)和連接表(CoEmpJob)。在現實世界中,這種設計還需要更多的表格 - 連接表格可以顯示哪些聯繫人連接到哪些公司以及他們當前的工作是什麼,但是人們更換工作(和公司),因此這樣的設計不會存儲任何歷史記錄。此外,習慣上將人員(僱員)與部門聯繫起來 - 一個人可能一次連接到多個部門,這意味着您將需要另一個聯合表。這可能變得非常複雜 - 這取決於你想要什麼。

您的評論建議您要將公司數據存儲在聯繫人表中 - 這是一個非常糟糕的主意;他們應該保持分開。

+0

感謝您的回答,也許它更好,而不是ContactType字段我把IsPerson作爲布爾,並且關於CoEmpJob表是的它有2個外鍵鏈接到聯繫人表(CompanyID - > ContactID IsPerson = False,CompanyEmployeeID-> ContactID IsPerson = True)。我的主要問題是關於CoEmpJob表,我可以實現我想要的還是有更好的方法? – Nimat