2011-08-30 33 views
0

我正在爲學習者管理系統設計架構。DB架構設計,帶有許多列的表

我目前有LearnerDetails表存儲以下類別的信息。 - 登錄用戶帳戶的詳細信息 - 聯繫方式和家庭住址 - 學習者的居住相關信息,包括國籍信息,目前的簽證細節,以留在英國等 - 學習者當前國家利益相關的信息 - 關於學習者當前的就業狀態的詳細信息

我的問題是,當所有這些信息都在一個表中表示時,列數超過了70列。

我可以做的一件事是,我可以將信息分離到代表上述類別的不同表中,並將這些表與父表LearnerDetails關聯爲1:1關係。

我想知道這是否是推薦的方法。 在我看來,1:1關係將代表一個數據庫超過標準化的數據庫。但如果我沒有這樣做,這將導致有一個巨大的水平表作爲我的LearnerDetails表。

非常感謝,如果你能讓我知道你的意見/建議。

回答

2

只要您有5NF或至少3NF,表格中的許多列沒有任何內在錯誤。

但是,有很多例子中垂直分區(1 :: 1)有意義 - take a look at a similar question

1

如果這是標準化所要求的,那麼70個或更多列完全沒有問題。你沒有提到你使用哪個rdbms,但大多數支持至少255個字段。

+0

DBMS是SQL Server 2008.是的,它確實支持我需要的列數。我基本想知道的是這是否是最佳做法。我是否應該有多個包含相關信息的小表(與父表的1:1關聯),還是應該有一個橫向大表。 (僅從數據庫設計的角度來看,不考慮任何有關去歸一化的查詢優化) –

2

列寬有多寬?如果你的記錄比頁面大,那麼有一張寬表就是一個等待發生的性能問題。

地址通常不是1-1與人的關係。是的,大多數人只有一個,但這不是每個人都有的。偶然的學生有時與每個離異的父母都生活在一起。我建議將地址分離出來。如果你存儲電話號碼,那兩個通常不會處於1-1關係。你可能有一個手機號碼是一個商號和家庭電話(固定電話)號碼。任何有可能最終需要成爲一對多關係的東西都應該從一開始就分離出來。

如果您將表分開並希望強制實施一對一關係,則yuo可以使用父表中的id作爲子表中的PK,或者對於表和set-set具有不同的Pk,爲FK字段提供唯一索引。不要在數據庫中建立一對一的關係。