[英]Relational database design: standard row values in one table vs. separate tables
注意:我已經看到了一些有關類似問題的相關問題。 但是,他們都無法完全回答我的問題。
我有學校的考試數據。 我的數據集中有大約500所學校,並且大約有12門學科考試(每所學校都有每項考試的數據)。 每個考試都有6個屬性(列)。 在將初始數據加載到數據庫之后,不希望進行任何修改。 關於SELECT
查詢,我認為單獨的考試數據與許多考試的查詢一樣頻繁使用。 但是,該數據庫將由網站使用以可視化數據,因此這些SELECT
查詢可能必須相當頻繁地運行。 考慮到這一點,我可以想到三種組織數據的方式,每種方式都可以(顯然)生成BCNF表。
第一種臭皮:
school
exam1_attr1
exam1_attr2
...
exam12_attr6
盡管我沒有強烈的反對意見,但這種模式讓人感覺很錯誤。 正如我所說,我的數據不會改變,因此將考試刻入屬性名稱並不是什么大問題。 但是,這樣的設置會給整個數據集帶來一些聚合困難(即,結果查詢可能會不必要地變得復雜)。
第二個模式:
school
examID
attr1
attr2
...
attr6
盡管這種模式看起來很吸引人,但我很難說服自己,將考試表示為值而不是列或單獨的表是個好主意。 也就是說,這組考試是已知的,有限的和期末的,每項考試具有完全相同的屬性-聽起來像是一張單獨桌子的主要候選人。 另一方面,在這種安排下,匯總查詢和單項查詢都非常簡潔明了。
第三個架構對於12個單獨的檢查表而言是相同的:
school
attr1
attr2
...
attr6
從概念上講,我認為此架構最能代表我的數據:每項檢查在邏輯上均分為各自的表。 但是,任何要求在所有考試中匯總數據的查詢都將包含12個表,這讓我感到不安。
因此,我的問題是:哪種數據庫設計對我而言是最好的? 在尋找答案的同時,我也對選擇一種模式而不是另一種模式的原因非常感興趣。 具體來說,我想知道:
簡而言之,我對任何可以幫助我理解為什么一種設計優於另一種設計的觀點都感興趣。 也歡迎任何數據庫設計理論。 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.