2011-12-01 43 views
0

注:我已經看到有關類似問題的一些相關問題;然而,他們都不會完全回答我的問題。關係數據庫設計:一個表中的標準行值與單獨的表格

我有學校的考試數據。我的數據庫中有大約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。

總之,我感興趣的任何意見,這將有助於我理解爲什麼一個設計比另一個更好。任何數據庫設計理論也是受歡迎的。謝謝!

回答

0

在一個可操作的關係數據庫中,變化的速度比選擇的速度更重要。在數據倉庫中,選擇的速度比變化的速度更重要。

您有一個數據倉庫。

操作關係數據庫是normalized

數據倉庫使用star schema的一些變體。

由於你陳述的原因,你的第二個模式是一個很好的模式。彙總和單一考試查詢都非常簡潔直接。但是,您應該將學校信息放在單獨的學校表中,並在考試表中引用學校表ID(主鍵字段,自動遞增整數)作爲外鍵。這使您可以更輕鬆地從500個學校擴展到50,000個學校。