Sql-Server
數據庫架構 - 設置與組和/或其成員相關的限制值
前提是有預先存在的表格(下附圖表)。就潛在相關屬性而言,它們每個都有許多案例。儘管如此,我仍然充滿信心地遵循最佳實踐,試圖添加一個特定的功能,我們可以將其稱為Limit及其受尊敬的表和相關屬性,這將不僅僅是一個 int 值。
預先存在的表(簡化為相關屬性):
極限表:
問題是,我希望能夠對任務和組都應用“限制”值,但是由於利弊,我發現很難在我提出的以下方法之間做出選擇,以及什麼可以被認為是最好的實踐。
方法一:
在 Limit 表中,為每個元組(行)添加兩個外鍵屬性(task_id,group_id)
方法二:
在 Limit 表中,為每個元組(行)添加一個帶有“切換”屬性 (is_group) 的外鍵屬性 (taskgroup_id)
想法:
自然地,我認為第二種方法可以被認為是更好的做法,因為它減少了插入數據庫的 NULL 值的數量,因此更符合關係數據庫結構的路線。
為了簡化功能,應該為每個任務分配一個限制值,但是如果沒有為具有限制值的任務插入限制元組/行,我們應該參考任務的受人尊敬的組的限制值(一個組連結到所有任務)。
根據我列出的方法,就最佳實踐而言,哪種方法會更好,或者您能想到哪種方法比提供的兩種方法更好?
請告知我是否應該在某個地方詳細說明。
兩者都不。TaskLimit 和 GroupLimit 應該是單獨的表,或者是 Task 和 Group 表上的單獨列。
您將更改極限值,對嗎?但不是組的名稱等。
- 過度規範化——除非有 (1) 數百萬個對名稱的引用或 (2) 名稱經常更改,否則不要打擾名稱。
- 如果上述更改沒有擺脫多對多映射表,則改進索引;見多:多映射
- 如果在兩個 ERD 之間仍有選擇,請寫出
SELECTs
需要的。這可能會幫助您在兩種模式設計之間做出決定。