iT邦幫忙

0

上班不要發文的發問-關於資料庫設計議題

  • 分享至 

  • xImage

小弟在工作上的疑惑,請社群的各位前輩可以一起討論,感謝(鞠躬)

資料表、欄位命名格式
目前我的作法是全小寫並用底下分開兩個單字
Table Name : customer
Table Column : customer_id , customer_name , customer_sample_name

在同一個 customer Table 底下的欄位,全部都會加上自身的 TableName
可以看出來每多一個單字,欄位名稱就會越來越長...

其實名稱長不是太大的問題,但轉換 EF Core 的 EDM 名稱就會越來越長到不好識別

我個人反思資料表欄位的前綴詞的必要性是否必須存在?
若為 PK 例如: customer_id , product_id 就蠻必要的

但 name , tel , fax 這些類型的欄位前綴詞的表名稱就顯得有些多餘?
當然我了解不管怎麼命名,只要好維護並且繼續堅持命名規則,這樣才能持續開發下去

在這邊只是想了解各位先進是如何命名,命名的觀點為何?

(若有不對的地方,請不吝指教,謝謝)

查閱了 SQL Server 跟 MySQL 的 Sample
SQL Server Sample :
https://sdwh.dev/posts/2021/12/SQL-Server-Sample-Databases/
https://dzone.com/.../collection-sql-server-sample-databases
MySQL Sample :
https://www3.ntu.edu.sg/.../prog.../sql/SampleDatabases.html
這邊我也請教了 #ChatGPT 神器

https://ithelp.ithome.com.tw/upload/images/20230301/20130323h74y43qBEi.png

https://ithelp.ithome.com.tw/upload/images/20230301/20130323DqWi7OCoJ6.png

https://ithelp.ithome.com.tw/upload/images/20230301/20130323d5aBp9wX2P.png

看更多先前的討論...收起先前的討論...
我的習慣是 索引欄 關聯欄 這些特殊欄位才會需要做前綴,還有一些欄位可以考慮後綴,例如日期時間 布林 等等的,還有該欄位有特殊設定也需要在欄位名註記,這是我的習慣,也許別人有更好的定義方式
ccutmis iT邦高手 2 級 ‧ 2023-03-01 13:33:57 檢舉
Google 'better SQL schema naming convention'
水無痕 iT邦新手 3 級 ‧ 2023-03-02 09:02:28 檢舉
基本上,在 Customer 資料表中, Name 就不用刻意取名成 CustomerName。可以把範圍這件事拿進來思考前綴詞這件事,如果是相同範圍 ( 例,上述的 Customer ),其實大可省略,避免贅詞,但是 FK 就必然要加上前綴詞。以上是資料表欄位內,我的命名方式 !
水無痕 iT邦新手 3 級 ‧ 2023-03-02 09:04:06 檢舉
另外,如果是多表 join 時,我就會完整的把前綴詞加上去,避免混淆 !
harry731 iT邦新手 2 級 ‧ 2023-03-02 12:18:58 檢舉
個人習慣是資料表名稱會用代表意義的簡稱,欄位會依照簡稱以流水號遞增,另外會作一份文件說明資料表用途及各欄位名稱與對應含意及相關欄位設定值
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
alien663
iT邦研究生 3 級 ‧ 2023-03-01 16:02:33

提供我的命名習慣給你參考,欄位名稱只要可以明確定義出資料用途就可,通常我不會另外加其它前綴,如果欄位定義複雜或是難以翻譯,才會考慮用其他名稱來代替。
例如 : "去年學生會幹部人數"這個欄位,可能就會用LY代表去年,C代表學生會,PC代表人數。

總而言之,這種資料面的命名,讓人看得懂才是重中之重,不然就是需要有文件說明清楚。

create table Entity
(
    EID int identity(1, 1),
    EName nvarchar(64),
    EDescription nvarchar(256),
    JData nvarchar(max),
    Since datetime default(getdate()), --data create time
    LastUpdate datetime default(getdate()),
    [Status] tinyint,
    constraint PK_Entity primary key(EID),
    constraint CK_Entity_JData check(isjson(JData) = 1),
	constraint UQ_Entity_EName unique(EName)
)

create table RelationShip
(
    EID1 int,
    EiD2 int,
    constraint PK_RelationShip primary key(EID1, EID2),
    constraint FK_RelationShip_EID1 foreign key(EID1) references Entity(EID),
    constraint FK_RelationShip_EID2 foreign key(EID2) references Entity(EID)
)
go

不懂就問RelationShip的EID1跟EID2為什麼一個要大小一個要小寫

0
fuzzylee1688
iT邦研究生 3 級 ‧ 2023-03-02 17:13:16

如果你的欄位命名是在 DW倉儲作運用的, 有意義的欄名, 就很重要了.
如:CUST_LOAN_RATE, ACCT_CURRENT_BAL

obarisk iT邦研究生 1 級 ‧ 2023-03-02 23:56:03 檢舉

一點也不,寫好 description,知道資料來源,比這種鬼名稱重要多了

我要發表回答

立即登入回答