2012-02-18 140 views
3

在我創建的大多數數據庫中,我總是通過預先附加表名來命名我的列名。例如:列名是否應該在所有表中唯一?

Person Table 
- PersonID 
- PersonName 
- PersonSurName 
- PersonTimestamp 

Customer Table 
- CustomerID 
- CustomerName 
- CustomerSurName 
- CustomerTimestamp 

,而不是讓

Person Table 
- ID 
- Name 
- SurName 
- Timestamp 

Customer Table 
- ID 
- Name 
- SurName 
- Timestamp 

但我在想,如果這真的是最好的,最方便和自我後來在路上解釋。在所有的表格中,是否應該將timestamp這樣的列更好地保留爲Timestamp?有關於它的一般良好實踐嗎?我在C#/ WinForms中使用這個數據庫。

+0

的[列命名在SQL最佳實踐(可能重複的http://計算器。 com/questions/664017/best-practices-for-column-naming-in-sql) – 2012-02-18 23:28:56

+0

外鍵是什麼?爲什麼不在這兩個表中使用相同的名稱呢? – TrueWill 2012-02-19 00:31:31

+0

兩個表中的外鍵都是相同的。例如,如果Customer與Person連接,那麼在Person中,CustomerID將具有CustomerID列名。 – MadBoy 2012-02-19 00:34:52

回答

5

我不喜歡這兩個例子。我寧願:

Person Table 
- PersonID  -- not ID, since this is likely to be referenced in other tables 
- FirstName -- why is a first name just a "name"? 
- LastName  -- why not use the form more common than surname? 
- ModifiedDate -- what is a "persontimestamp"? 

我是堅決反對的主鍵,將發生在模型中的其他表,用類似「ID」通用的東西被命名爲 - 我再也不想看到ON p.ID = SomeOtherTable.PersonID - 一個模型中多個表共有的實體應在整個模型中一致地命名。其他方面,如FirstName只屬於該表 - 即使其他表具有名字,也不一樣的「實體」可以這麼說。即使你無論出於何種原因都加入了這兩個表格,你總是會區分它們爲Person.FirstNameCustomer.FirstName - 所以添加PersonCustomer前綴對於任何必須編寫這樣的字符的人來說都是多餘的,煩人的查詢。

而且Timestamp是一列一個可怕的名字(或列後綴)在SQL Server模式,因爲TIMESTAMP是具有無關日期或時間數據類型和名稱可能意味着其他使用您的同行。

當然,這一切都是非常主觀的。這就像問100個人你應該開什麼車。你會得到一些答案,現在將由你來扯淡,找出對你,你的團隊和你的環境有意義的東西。 :-)

1

的一些列可能被重複或具有相同的值,我一般在這種情況下使用相同的名稱,時間戳等我和財務數據的工作,並想命名的列股票名稱本身,而不是讓不同名稱在不同的表中。

3

以我的經驗爲列更標準的命名約定是不包括由於以下原因,表名:

  1. 這是不必要的重複
  2. 這是更難,因爲保持如果表名稱更改將來所有的列都需要重命名。
  3. 約定可能不會被另一個執行者清除
  4. 當您執行查詢時,如果您需要表中的表名,那麼您始終可以在該點處別名。

如果列是另一個表的外鍵,我只會在列中使用表名。如果你使用這個約定,那麼在不使用關係圖的情況下,可以相對容易地識別表中的外鍵列。

2

你的第一個例子是在我看來更好。 (當你建立查詢,往往需要AS SQL關鍵字第二種是混淆)

但是在我的店裏,我們用一點點不同的約定。
的PrimaryKey - 此列應命名爲開始ID和隨後的tablename(IDPerson
ForeingKey - 此列應開始ID命名,隨後由外部表的名稱(IDDepartment
OtherColumns - 它們應該對包含的數據有一個有意義的名稱。只需要在不同表中具有相同名稱的字段重複表名。

當使用參數來調用存儲過程,你應該扭轉約定(@personID, @departmentID

2

Uggghhh,我想我只是太懶惰,所以我會做Department.ID而不是Department.DepartmentID。我有足夠的冗餘工作,因爲它是足夠的。

+0

它也更適合複製 - 粘貼編程,它有其地方。 – usr 2012-02-19 00:02:58

+2

因爲我們都需要複製和粘貼'ID'?這需要更多的工作,而不僅僅是輸入「ID」... – 2012-02-19 00:57:11

1

我從來沒有看到differente廠商之間相同的規則。我不知道是否有一些標準,但我認爲不是!

就我個人而言,我喜歡你的第二選擇。在列名中重複表名,是不必要的重複。

0

我喜歡試着保持列名在我的數據庫中唯一。我通過使用表和列的前綴來實現這一點,以便即使是外鍵也是唯一命名的。這使得做任命爲我(通常)不需要引用表中加入簡單:

-------------------- 
pe_people 
-------------------- 
    pe_personID (PK) 
    pe_firstName 
    pe_lastName 
    pe_timeStamp 
-------------------- 

-------------------- 
ac_accounts 
-------------------- 
    ac_accountID (PK) 
    ac_personID (FK) 
    ac_accountName 
    ac_accountBalance 
-------------------- 
SELECT pe_firstName, pe_lastName, pe_accountName, pe_accountBalance 
FROM pe_people 
INNER JOIN ac_accounts ON (ac_personID = pe_personID) 
WHERE pe_timeStamp > '2016-01-01'; 
+0

選擇的答案(Aaron Bertrand's)很好,因爲它實質上是將字段命名爲域。 first_name是任何表中的first_name,但account_id永遠不會是person_id。如果兩件事情是相同的,只是在不同的表格中,那麼它們應該具有相同的名稱。如果兩件事情不同,那麼它們應該有不同的名稱。屬性獨立存在並且在它們之間的關係之前存在,因此通過它們的關係給屬性加前綴沒有多大意義。 – 2017-03-06 21:39:19

相關問題