2015-10-06 89 views
1

說你有三種不同類型的數據庫實體它是一個很好的做法,同一列的多個表

COUNTRY (TABLE) 
id | name | system_field (boolean) 

system_field=true系統將不允許任何人刪除該行。對於例如開箱系統提供了一些國家(如美國,英國等〜沒人被允許刪除)

同樣

ROLE (TABLE) 
id | name | system_field (boolean) 
1 | Admin| true 
2 |Role2 | false 

沒有人被允許刪除一個角色,其中system_field標誌爲真。這種限制/驗證在應用程序級別。

對於其他類型的數據庫實體,需要擁有這樣的「system_field」,並且感覺像在許多表中重複使用system_field列。請注意,這些db實體彼此不相關。有沒有更好的方法來模擬這樣一個列(system_field),以便它可以很容易地用於將來的表格,而不需要ALTER ing現有的表格添加system_field布爾列?

+1

這沒有什麼錯。然而,我希望有一個更具描述性的名字,例如'is_system_generated'或'is_deleteable'(如果這是列的唯一目的)。 'system_field'可能意味着_anything_ –

+0

@a_horse_with_no_name我完全同意。 –

+0

另外,'system_field'是自引用的。 'system_tuple'或'system_row'至少會說些什麼,但我同意可能有更好的名字。 –

回答

3

COUNTRYROLE代表不同的,不相關的域實體。它們碰巧具有同名的描述性屬性system_field

由於實體在含義上並不相關,它們應該分別佔據它們自己的表格,並且每個實例都有一個system_field列是正確的。

如果實體是概念相關,說客戶EMPLOYEE有可能是很好的論點支持標準化數據表示的。

+0

我不知道如何正常化客戶和員工(我必須看到他們存儲的實際數據),但是否則您是正確的。 – Jeff

+0

@Jeff:是的,取決於具體情況。將「將」更改爲「可能」。 –

相關問題