注:我已經看到有關類似問題的一些相關問題;然而,他們都不會完全回答我的問題。關係數據庫設計:一個表中的標準行值與單獨的表格
我有學校的考試數據。我的數據庫中有大約500所學校和大約12門科目考試(每所學校都有每門考試的數據)。每個考試有6個屬性(欄)。初始數據加載到數據庫後,不需要修改。關於SELECT
查詢,我想像使用單獨的考試數據的頻率與多次考試的查詢次數一樣多。但是,數據庫將被可視化數據的網站使用,因此這些查詢可能必須經常運行。考慮到這一點,我可以想到組織這些數據的三種方式,每種方式都會生成(顯然)BCNF表格。
首先scema:
school
exam1_attr1
exam1_attr2
...
exam12_attr6
此架構感覺錯了,雖然我沒有反對它強有力的論據。正如我所說,我的數據不會改變,因此考試刻成屬性名稱並不是什麼大問題。然而,這樣的設置會對整個數據集造成一些聚合困難(即,所得到的查詢可能不必要地複雜)。
第二個架構:
school
examID
attr1
attr2
...
attr6
雖然這個模式看起來有吸引力,我很難說服自己這是代表考試的值,而不是列或單獨的表是一個好主意。也就是說,考試集是已知的,有限的和最終的,每個考試具有完全相同的屬性 - 聽起來像是一個單獨表格的主要候選人。另一方面,在這種安排下,聚合和單一考試查詢都非常簡潔直接。
三模式會爲12個獨立的考試表格是相同的:
school
attr1
attr2
...
attr6
從概念上講,我會覺得這個模式代表我的數據最好的:每次考試在邏輯上分離到它自己的表。但是,任何需要彙總所有考試數據的查詢都會包含12個表格,這讓我感到很不安。
因此,我的問題:哪種數據庫設計對我來說最好?在我尋找答案的同時,我也對選擇另一種架構的理由非常感興趣。具體來說,我想知道:
- 運行的效率如何查詢與每個數據庫的設計變更,
- 在現實生活中是多麼的重要易於書寫的查詢(假定數據將主要由一個網站 - 我在網站完成後很少會寫數據查詢數據),
- 哪個設計更好,如果潛在的將來網站數據的變化都會被考慮在內,
- 不管你的答案會不一樣如果數量學校不是500,而是50000。
總之,我感興趣的任何意見,這將有助於我理解爲什麼一個設計比另一個更好。任何數據庫設計理論也是受歡迎的。謝謝!