Normalization
對一個非常小的數據庫進行規範化?
我正在設計一個非常小的數據庫(約 250 行)。對於每條記錄,我有許多數據點,根據規範化規則,它們應該位於單獨的表中。
例如:
- 多個不同類別的百分比(加起來應為 100)
- 多個數據源(例如,一條記錄可能來自多達 4 個數據源 - 應記錄這些數據源中的引用
- 具有非常不同單元的列,例如我想儲存住宅單元和傳遞的總建築面積(不同的單元)。
所有這些欄位都是可選的,沒有一個是強制性的。
我正在考慮在案例 1 中不進行規範化,因為我想要一個數據完整性檢查,以確保每個數據庫行中的所有相關列加起來為 100%。
對於其他兩種情況,似乎要進行大量工作才能正常化而不是獲得很多收益。對於 3,我將不得不設計 2 個額外的表,一個用於儲存數據:
| ID(prim key) | project(FK) | type(int) | value(float) | |--------------|----------------------|-----------|--------------| | 1 | 1 | 1 | 200.3 |
另一個用於儲存列元數據:
| ID(prim key) | typeID(FK) | Description | |--------------|-------------|-------------| | 1 | 1 | GFA(m2) |
而不僅僅是在主表中執行此操作:
| RecordID(prim key) | GFA(m2) | Residential units | .... | |--------------------|---------|-------------------|------| | 1 | 200 | 25 | .... |
有了這麼小的數據,我主要關心的是如果架構發生變化,我會更新東西,但我想不出使用非規範化數據會更難的原因。#
誰能給我一個很好的理由來規範案例 2 和 3?
謝謝
對於只有幾行的小型數據庫,您可能會說設計是您可以維護和維持的任何東西。但是,需要考慮的一些事項包括:
- 請記住,第一個實現不是未來的實現。提前計劃一點可以在未來避免頭痛。
- 如果將來數據庫應該擴大規模,您可能會發現自己正在重構表和程式碼。
- 由於在
Table3
列中命名為GFA(m2)
,Residential units
, 等等,無論您要測量什麼,您都承諾在添加新度量時重複更改該表。順便說一句,我注意到你
values(float)
的 200.3 在決賽桌中變成了 200。(也許只是一個錯字。)但請確保保留定義的列的數據類型以適合您儲存的數據。而且,是的,如果我將其傳遞給某人,我會進一步規範化它。