為什麼 WordPress 使用列前綴?
我正在嘗試通過開源項目學習一些基本的數據庫設計。
並查看 WordPress 數據庫模式,例如文章表,您會發現類似這樣的內容
post_author
post_date
post_title
post_content
……
等等
。
我們已經在文章表中,為什麼不只是
author
,date
,title
,content
?有什麼理由嗎?或者只是因為 WordPress 太舊了..?(其他表也一樣。在 users 表中,會找到
user_login
,user_pass
,user_email
等)我發現很多人說使用列前綴是一種不好的做法,那麼,只是
title
,content
……會是一個更好的設計嗎?
關於列或欄位的命名有不止一種思想流派。
一種觀點認為,名稱應該表達所傳達數據的意圖,即使該名稱與其所在的上下文是分開的。因此,像 post_date 這樣的名稱或像 comment_date 這樣的另一個名稱不僅告訴讀者這是一個日期,而且它是一個文章或評論的日期。
這種約定的一個優點是它可以更容易地維護數據字典,其中可以找到每個數據元素的完整定義。從列名導航到相應的數據字典很容易。
這個約定顯然是在 Wordpress 中使用的。
另一種觀點認為,列或欄位的名稱應該根據其在該上下文中所扮演的角色來傳達在表或記錄中找到它的列或欄位的意圖。因此, date 只是告訴您這是一個日期,但 post.date 可能會告訴您這是一個文章的日期。並且comment.date 會告訴你這是評論的日期。
這兩種思想流派都有優點和缺點。一旦同意命名標準,最重要的是要保持一致。有時被忽視的命名約定會給維護者帶來陷阱。
第二種約定的一個缺點是 FK 通常永遠不能與它們所引用的 PK 具有相同的名稱。另一個缺點是,如果有一個上下文,例如表單管理器,其中“日期”是一個保留字,那麼現在您將被迫違反您自己的約定。
第一個約定的一個缺點是它使表達自反關係變得很尷尬,其中一個 FK 引用同一個表中的不同行。以“supervisor_id”為例,這是一個您一直在員工表中找到的列。您不能將其命名為與其所指的 PK 相同的名稱,因為那樣您將在同一個表中有兩個具有相同名稱的列,這是被禁止的。所以現在你被迫違反你的約定。