新聞中心
在進(jìn)行數(shù)據(jù)庫設(shè)計時,表名的命名是非常重要的一步。特別是在選擇表名時,要注意表名是單數(shù)還是復(fù)數(shù)形式。這一點看起來非常簡單,但實際上卻是一個常犯的錯誤。本文將詳細(xì)說明單數(shù)和復(fù)數(shù)的區(qū)別,表述它們各自的應(yīng)用場景,以及在數(shù)據(jù)庫命名時應(yīng)該如何避免這種錯誤。

單數(shù)和復(fù)數(shù)的區(qū)別
我們需要明確單數(shù)和復(fù)數(shù)的區(qū)別。單數(shù)是指一個可數(shù)名詞的單個實例,而復(fù)數(shù)是指多個可數(shù)名詞的實例。例如,一個人是單數(shù),而兩個人是復(fù)數(shù)。在同樣的情況下,一個書柜是單數(shù),而兩個書柜是復(fù)數(shù)。
在數(shù)據(jù)庫中,單數(shù)和復(fù)數(shù)的區(qū)別被定義為表中數(shù)據(jù)的數(shù)量。如果一個表只包含一個實例,那么表名應(yīng)該是單數(shù);如果一個表包含多個實例,那么表名應(yīng)該是復(fù)數(shù)。
使用單數(shù)和復(fù)數(shù)的應(yīng)用場景
為了更好地理解單數(shù)和復(fù)數(shù)在數(shù)據(jù)庫中的應(yīng)用場景,我們應(yīng)該關(guān)注三個主要方面:數(shù)據(jù)表、數(shù)據(jù)記錄、以及數(shù)據(jù)庫操作。
數(shù)據(jù)表
當(dāng)數(shù)據(jù)表只包含一個實例時,表名應(yīng)該是單數(shù)。例如,一家醫(yī)院可能只需要一個“患者”數(shù)據(jù)表,而不需要一個“患者們”的數(shù)據(jù)表。這樣一來,在定義和使用數(shù)據(jù)庫表名時,我們應(yīng)該使用與數(shù)據(jù)表相應(yīng)數(shù)量相符的名稱。
數(shù)據(jù)記錄
當(dāng)數(shù)據(jù)表包含多個實例時,表名應(yīng)該是復(fù)數(shù)。例如,一家醫(yī)院可能需要一個“患者”數(shù)據(jù)表來保存所有的病人記錄。這個表可以包含數(shù)百甚至數(shù)千條數(shù)據(jù)記錄,每個病人都有一個單獨的數(shù)據(jù)記錄。
數(shù)據(jù)庫操作
在執(zhí)行數(shù)據(jù)庫操作時,應(yīng)該根據(jù)表名的單數(shù)復(fù)數(shù)來決定所執(zhí)行的操作。例如,如果表名是單數(shù),那么查詢語句應(yīng)該使用“SELECT * FROM 表名”而不是“SELECT * FROM 表名S”。
單數(shù)和復(fù)數(shù)的誤用
在日常使用中,單數(shù)和復(fù)數(shù)的誤用是非常普遍的。特別在編寫代碼時,很多人會不假思索地使用單數(shù)或復(fù)數(shù)的形式。在沒有意識到這個問題的時候,這個錯誤可能會被視而不見。然而,一旦這個錯誤的影響被放大到一個龐大的系統(tǒng)上,它就會對用戶產(chǎn)生非常不利的影響。
例如,當(dāng)一個應(yīng)用程序中的表名使用了錯誤的單數(shù)或復(fù)數(shù)時,用戶將無法正確地執(zhí)行數(shù)據(jù)庫操作。更糟糕的是,這個錯誤可能會導(dǎo)致應(yīng)用程序錯誤地刪除或插入數(shù)據(jù),甚至不知不覺地改變了重要的數(shù)據(jù)庫記錄。
另外,這種錯誤還會不利地影響數(shù)據(jù)庫的性能。如果表名被使用錯誤的方式來查詢數(shù)據(jù)庫記錄,那么查詢可能會變得非常慢,因為數(shù)據(jù)庫引擎在查詢時可能需要掃描整個表。
在數(shù)據(jù)庫命名中正確使用單數(shù)和復(fù)數(shù)
為了避免單數(shù)和復(fù)數(shù)的誤用,我們在數(shù)據(jù)庫命名中必須使用正確的單數(shù)和復(fù)數(shù)形式。以下是一些設(shè)計數(shù)據(jù)庫表名的有效方法:
1. 使用正確的單數(shù)和復(fù)數(shù)形式
當(dāng)定義表名時,應(yīng)該考慮表中數(shù)據(jù)的數(shù)量,將表名用單數(shù)或復(fù)數(shù)的形式,與數(shù)據(jù)表中相應(yīng)的數(shù)據(jù)記錄相匹配。
2. 按照命名規(guī)則命名
在定義數(shù)據(jù)表名時,應(yīng)該按照特定的規(guī)則來命名。例如,可以約定所有的單數(shù)表名以“_s”結(jié)尾,而所有的復(fù)數(shù)表名以“_p”結(jié)尾。
3. 參考相關(guān)文檔
在數(shù)據(jù)表命名時,應(yīng)該先查看相關(guān)文檔,以確保我們的命名符合標(biāo)準(zhǔn),不會導(dǎo)致混淆。
4. 特別注意不規(guī)則名詞
對于不規(guī)則名詞,如“人員”、“系”等等,應(yīng)該確定好統(tǒng)一的使用方式,以避免混淆。
結(jié)語
單數(shù)和復(fù)數(shù)在數(shù)據(jù)庫命名中的區(qū)別是非常重要的,設(shè)計者必須要認(rèn)真考慮,選擇正確的形式來定義表名。正確的命名方法有助于提高程序的可讀性和可維護性,保證程序的正確性和性能。因此,在設(shè)計數(shù)據(jù)庫時,請在之前進(jìn)行充分的思考,確保表名的單數(shù)復(fù)數(shù)的區(qū)分得當(dāng)。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220請教C#/.net/linq/EF如何根據(jù)表名獲取復(fù)數(shù)形式。
typeof(T).Name
得到單數(shù)?您確定么?
首先您說的typeof(T).Name這個函數(shù)為
獲取T的DATATYPE基類型.NAME為該基類型的CLASS定義名稱.
entity:實體對吧…我實在沒明白您是想在這個框架內(nèi)做什么事情…
如果您說是BUS變成BUSES..那我告訴您一鍵渣跡個秘密.C#在中文系統(tǒng)下允許漢字命名類,也就是我定義一個”人”,能變成啥….
下面我說兩個猜想,之一段為疑稿并問,第二段為我根據(jù)您的描述自己覺得您的問題解答梁慧方式:
1.
我再看看您的問題跟樓上幾位的回答以下為我個人疑問點您補充一下,,然后我回答吧:
假如說現(xiàn)在有個Employee的entity,那Employee是復(fù)數(shù)形式
Employee在您的思維范圍內(nèi)是基本的員工實體吧..我可以當(dāng)作是復(fù)數(shù)也可以當(dāng)作不是..
甚至單詞寫錯亦不是我的問題或編譯器能夠處理的吧..所以您方便舉例說明.什么是單數(shù)情況,什么是復(fù)數(shù)情況嘛?
然后就是:也就是說不能一律加s
這句話,您的意思是想干啥呢?就獲取一個字符串?那很簡單…
下面就看我的猜想吧
2.根據(jù)您末尾描述:
我現(xiàn)在有個函數(shù),有泛型類型參數(shù)T,typeof(T).Name可以得到單數(shù),如何得到復(fù)數(shù)?
..我差不多明白您想干啥了
嘗試自己編寫一個類:
我下面是手敲了,,對不對自己改正一下..
public class MyTypeofHelper
{
public static string MyTypeof-GetName(T t)
{
return typeof(t).Name
}
public static string MyTypeof-GetName(T t)
{
//這里根據(jù)類特性,獲取您自定義的一個內(nèi)容
例如我這邊隨便寫了啊
t.GetField(“Names”).GetValue(t);
這樣應(yīng)該就行了= =好吧我也說不清楚了
然后在定義這些實體時候呢,加上一個屬性即可
}
}
例如這樣
public class bus
{
//你自己隨便定義撒
固定定義一個
public string Names
{get{return “Buess”;}}
}
然后是什么就是什么即可
.NET本身沒有這樣的函數(shù)信螞,這個涉及到英滑念埋語詞法(?),typeof(T).Name能得到對象的名稱,
如果你的實體類名定義成bus就是bus,要得得高者buses只能定義名buses
EF生成出慧譽來的Entity的名稱默認(rèn)跟你的表名是一樣前搭段的。你也可以手動更改,但必枝侍須用附加屬性說明映射的是哪個表!
我完全不明白你想要表達(dá)什么意思。什么需求,你說的復(fù)數(shù)形式又是什么??
請詳細(xì)說明好嗎?
如何優(yōu)雅的進(jìn)行表結(jié)構(gòu)設(shè)計
數(shù)據(jù)庫表的命名
使用名詞作為表名
仔細(xì)想想便可發(fā)現(xiàn),數(shù)據(jù)庫表中存在的所有數(shù)據(jù)都是現(xiàn)實世界各種操作的結(jié)果,它們有的是中間過程結(jié)果,有的是最終數(shù)據(jù)結(jié)果。不論怎樣,它們是一份一份沒有任何動作的,靜態(tài)的記錄。而表本身就是存儲這些記錄的絕拍容器,從這樣的層面理解,表名應(yīng)該采用名詞的形式是完全符合邏輯的。
比如我們要設(shè)計一個存儲用戶邀請的表,invitation 就比 invite 更加的優(yōu)雅。
相關(guān)表采用統(tǒng)一前綴
我們知道,大型系統(tǒng)的設(shè)計往往按模塊或者子系統(tǒng)進(jìn)行劃分,一個一個模塊的處理問題,保證模塊間的低耦合,模塊內(nèi)的高內(nèi)聚。數(shù)據(jù)庫表設(shè)計也一樣,我們可以對相關(guān)聯(lián)的表采用相同的前綴,使開發(fā)人員一眼看上去就知道哪幾個表是相關(guān)的。
比如對于用戶基本信息表、用戶的詳細(xì)信息表和用戶的微信綁定表如下的命名更可?。?/p>
user
user_profile
user_wecha
字段的命名
本節(jié)先介紹幾個比較通用的原則,使得字段的含義更容易理解,描述性更強,之后進(jìn)行簡單的總結(jié)分類,以便讓我們明白這些原則背后的邏輯。
使用動詞被動形式+描述性后綴
通過前面我們知道,數(shù)據(jù)庫表中的所有記錄都是靜態(tài)的結(jié)果性數(shù)據(jù),它是由一定的用戶操作產(chǎn)生的。那么它是如何產(chǎn)生的?經(jīng)過什么樣的操作產(chǎn)生的呢?
在解答之前先看一個例子,下面是一個簡單的 article 表結(jié)構(gòu):
id: integer
title: varchar
content: text
user_id: integer
create_time: timestamp
這樣的設(shè)計本身是沒有問題的,目前用的也很多。這個設(shè)計主要的問題是沒有體現(xiàn)出 user_id 與這篇文章的關(guān)系,需要經(jīng)過一定的猜測和思考才能得出。create_time 雖然還比較直觀,但沒有體現(xiàn)出這篇文章實在過去的某個時間創(chuàng)建的。
然后我們在來看修改后的設(shè)計:
id: integer
title: varchar
content: text
created_by: integer
created_at: timestamp
通過把 user_id 替換為 created_by、create_time 替換為 created_at,使得我們更容易理解對應(yīng)的文章是被指定的人在指定的時間創(chuàng)建出來的,而不需要我們的多方猜測或者查閱文檔,使得整個表結(jié)構(gòu)的描述性更強。
時間區(qū)分當(dāng)前時間和未來時間
英語中表時間的時候, at 一般跟一個時間點,而 in 有表示在未來的某個時間之內(nèi)的意思。結(jié)合起來,筆者傾渣首向于用 at 表示過去或者現(xiàn)在的時間,而用 in 表示未來的時間。比如日歷中的 event 有開始時間和結(jié)束時間的概念,我覺得如下的命名是比較合理的:
starts_at 事件的開始時間,相對 ends_in 它屬于當(dāng)前時間,采用 _at 后綴
ends_in 事件的結(jié)束時間,相對 ends_in 它屬于未來時間,從用 _in 后綴
其他我們比較常用的比如 created_at、updated_at、expires_in 都屬于這種類型。
使用第三人稱單數(shù)
當(dāng)我們采用動詞+介詞的時候我更傾向與使用第三人稱單數(shù),因為字段描述的這個并梁羨實體是單數(shù)的,通過使用第三人稱單數(shù),我們可以自然語言的方式表達(dá)出需要的意思。比如以 event 為例,翻譯成英語是這樣的:
The event starts at:00:00
完全符合英語的語法,也表達(dá)了想要表達(dá)的意思。
區(qū)分單數(shù)與復(fù)數(shù)
單數(shù)與復(fù)數(shù)主要是對字段內(nèi)容的描述,比如通知(notification)有接收人這個字段,如果我們需要通知能夠發(fā)送給多個人,那么 receivers 這樣的字段名稱明顯好于 receiver,因為 receivers 體現(xiàn)了通知可以發(fā)送給多個人這一個事實。
前面從四個原則出發(fā)介紹了如何讓字段更具有描述性,簡單總結(jié)下來我覺得從語義上來說,字段可以分為兩種類型:描述性字段和動作性字段。
描述性字段是對對應(yīng)數(shù)據(jù)庫記錄(或者說實體)的補充說明,比如以人作為實體,那么人的身高、體重和血壓就屬于這類描述性字段。
描述性字段如果是動詞+介詞的形式,動詞需要采用第三人稱單數(shù)的形式,比如 starts_at。然后根據(jù)字段的內(nèi)容,如果內(nèi)容有多個元素或?qū)嶓w,我們需要使用復(fù)數(shù),否則使用單數(shù)形式。
動作性字段不僅能對所屬實體進(jìn)行補充說明,還能對這個實體的所涉及操作有所描述。比如我們有 article 這個實體, article 的 created_by 和 created_at 就屬于動作性字段,因為它不僅表達(dá)了 article 的創(chuàng)建者和創(chuàng)建時間這層信息,它還表達(dá)了這個 article 是指定的人被創(chuàng)建的,而不是憑空生成的。
關(guān)于數(shù)據(jù)庫 表名 單數(shù)復(fù)數(shù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)是成都專業(yè)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、SEO優(yōu)化、手機網(wǎng)站、小程序開發(fā)、APP開發(fā)公司等,多年經(jīng)驗沉淀,立志成為成都網(wǎng)站建設(shè)第一品牌!
網(wǎng)頁題目:數(shù)據(jù)庫設(shè)計要注意表名單數(shù)復(fù)數(shù)的區(qū)分(數(shù)據(jù)庫表名單數(shù)復(fù)數(shù))
文章地址:http://m.fisionsoft.com.cn/article/ccddjpj.html


咨詢
建站咨詢
