2013-01-22 38 views
0

我讀過關於一個原則,聲明以下內容:「每個數據元素應該在數據庫架構中具有唯一的名稱。」(http://bytes.com/topic/sql-server/answers/439341-name關鍵字)你如何執行這個?如何強制我的數據庫模式中的每個數據元素都有唯一的名稱?

通常的技術是在列的有意義的名稱之前放置一個三字符的縮寫。因此,Employee.Name變爲Emp_Name。到現在爲止還挺好。但是,Employer.Name也應該成爲Emp_Name。所以,我必須爲僱主想出一些神祕的縮寫,這是毫無意義的。比方說,「Eml」。而且,隨着架構變得越來越大,越來越多的努力必須致力於避免碰撞。

在我看來,一個很好的折衷將始終使用合理的前綴。這樣,我們避免了大多數碰撞,而不使用不直觀的縮寫 - 比如僱主的「Eml」。

+0

您可以採用一種策略,在創建它之前始終檢查具有建議名稱的實體是否已經存在 – paul

+1

在風格上,我不同意兩個列不應該共享相同名稱的想法 - 它們可以很容易地通過在查詢中使用別名來消除歧義。我也認爲重複列內的表/實體名稱是多餘的,即dbo.Customer.CustomerId,dbo.Customer.CustomerName。爲什麼不只是Id和Name?只是我謙卑的意見壽! – Matt

+0

是的,保羅,但政策需要付出很多努力,尤其是當有許多人在項目中工作時。政策不會防止不直觀的縮寫,如上面提到的「Eml」。 – Josep

回答

1

要求每個數據元素都有一個唯一的名稱,如果而不是被解釋爲具有唯一名稱的每一列。

外鍵尤其應該基於它們所引用的表具有相同的名稱。所以,CustomerID無論發生什麼都意味着同樣的事情。這將是對Customer表的主鍵的引用。我會在表CustomerID中調用主鍵,但有時候我也會將它看作ID

還有一些其他情況是重複的名稱是好的。我創建的所有表都在每行上都有元數據,用於描述何時創建該行以及誰創建該行。這些分別被稱爲CreatedAtCreatedBy。這些都在所有表中,但不是邏輯數據模型的一部分。

想到重複名稱的另一種情況是有效的,並在緩慢變化的維度上結束日期。將這些EffDateEndDate(或其他)稱爲通常比較簡單,而不是試圖使它們獨一無二。

最後,我使用涉及多個登臺表的數據流方法做了大量的處理。我非常故意將列名稱保留爲跟蹤目的。

但是,您的問題的答案是使用與表相關的前綴。該表唯一的數據元素可以有一個簡短的前綴,因此我們知道它們是什麼。例如,Cust_NameAddr_City是客戶表中客戶名稱和地址表中城市名稱的合理名稱。

+0

我真的很感激你花時間回答,但你的迴應沒有幫助。我已經知道數據元素與列不完全相同,儘管我並不認爲它與這裏相關。 短前綴的想法與我已經提到的一樣,所以它沒有給討論帶來任何知道的東西。 – Josep

相關問題