簡體   English   中英

關系數據庫設計:一個表與單獨表中的標准行值

[英]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個表,這讓我感到不安。

因此,我的問題是:哪種數據庫設計對我而言是最好的? 在尋找答案的同時,我也對選擇一種模式而不是另一種模式的原因非常感興趣。 具體來說,我想知道:

  • 運行查詢的效率如何隨每個數據庫設計而變化,
  • 編寫查詢的難易程度在現實生活中有多重要(假設數據將主要由網站使用-網站建成后,我很少會對數據進行查詢),
  • 如果考慮到網站數據未來可能發生的變化,哪種設計更好,
  • 如果學校的數量不是500,而是50,000,您的答案是否會有所不同。

簡而言之,我對任何可以幫助我理解為什么一種設計優於另一種設計的觀點都感興趣。 也歡迎任何數據庫設計理論。 謝謝!

在可操作的關系數據庫中,更改的速度比選擇的速度更為重要。 在數據倉庫中,選擇的速度比更改的速度更為重要。

您有一個數據倉庫。

運作關系數據庫已標准化

數據倉庫使用星型模式的某些變體。

出於您陳述的原因,您的第二個模式是一個好的模式。 匯總查詢和單項查詢都非常簡潔明了。 但是,您應該將學校信息放在單獨的學校表中,並在檢查表中將學校表ID(主鍵字段,自動遞增整數)作為外鍵引用。 這使您可以更輕松地將學校從500所擴展到50,000所。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM