数据库设计要注意表名单数复数的区分 (数据库 表名 单数复数)

在进行数据库设计时,表名的命名是非常重要的一步。特别是在选择表名时,要注意表名是单数还是复数形式。这一点看起来非常简单,但实际上却是一个常犯的错误。本文将详细说明单数和复数的区别,表述它们各自的应用场景,以及在数据库命名时应该如何避免这种错误。

单数和复数的区别

我们需要明确单数和复数的区别。单数是指一个可数名词的单个实例,而复数是指多个可数名词的实例。例如,一个人是单数,而两个人是复数。在同样的情况下,一个书柜是单数,而两个书柜是复数。

在数据库中,单数和复数的区别被定义为表中数据的数量。如果一个表只包含一个实例,那么表名应该是单数;如果一个表包含多个实例,那么表名应该是复数。

使用单数和复数的应用场景

为了更好地理解单数和复数在数据库中的应用场景,我们应该关注三个主要方面:数据表、数据记录、以及数据库操作。

数据表

当数据表只包含一个实例时,表名应该是单数。例如,一家医院可能只需要一个“患者”数据表,而不需要一个“患者们”的数据表。这样一来,在定义和使用数据库表名时,我们应该使用与数据表相应数量相符的名称。

数据记录

当数据表包含多个实例时,表名应该是复数。例如,一家医院可能需要一个“患者”数据表来保存所有的病人记录。这个表可以包含数百甚至数千条数据记录,每个病人都有一个单独的数据记录。

数据库操作

在执行数据库操作时,应该根据表名的单数复数来决定所执行的操作。例如,如果表名是单数,那么查询语句应该使用“SELECT * FROM 表名”而不是“SELECT * FROM 表名S”。

单数和复数的误用

在日常使用中,单数和复数的误用是非常普遍的。特别在编写代码时,很多人会不假思索地使用单数或复数的形式。在没有意识到这个问题的时候,这个错误可能会被视而不见。然而,一旦这个错误的影响被放大到一个庞大的系统上,它就会对用户产生非常不利的影响。

例如,当一个应用程序中的表名使用了错误的单数或复数时,用户将无法正确地执行数据库操作。更糟糕的是,这个错误可能会导致应用程序错误地删除或插入数据,甚至不知不觉地改变了重要的数据库记录。

另外,这种错误还会不利地影响数据库的性能。如果表名被使用错误的方式来查询数据库记录,那么查询可能会变得非常慢,因为数据库引擎在查询时可能需要扫描整个表。

在数据库命名中正确使用单数和复数

为了避免单数和复数的误用,我们在数据库命名中必须使用正确的单数和复数形式。以下是一些设计数据库表名的有效方法:

1. 使用正确的单数和复数形式

当定义表名时,应该考虑表中数据的数量,将表名用单数或复数的形式,与数据表中相应的数据记录相匹配。

2. 按照命名规则命名

在定义数据表名时,应该按照特定的规则来命名。例如,可以约定所有的单数表名以“_s”结尾,而所有的复数表名以“_p”结尾。

3. 参考相关文档

在数据表命名时,应该先查看相关文档,以确保我们的命名符合标准,不会导致混淆。

4. 特别注意不规则名词

对于不规则名词,如“人员”、“系”等等,应该确定好统一的使用方式,以避免混淆。

结语

单数和复数在数据库命名中的区别是非常重要的,设计者必须要认真考虑,选择正确的形式来定义表名。正确的命名方法有助于提高程序的可读性和可维护性,保证程序的正确性和性能。因此,在设计数据库时,请在之前进行充分的思考,确保表名的单数复数的区分得当。

相关问题拓展阅读:

请教C#/.net/linq/EF如何根据表名获取复数形式。

typeof(T).Name

得到单数?您确定么?

首先您说的typeof(T).Name这个函数为

获取T的DATATYPE基类型.NAME为该基类型的CLASS定义名称.

entity:实体对吧…我实在没明白您是想在这个框架内做什么事情…

如果您说是BUS变成BUSES..那我告诉您一键渣迹个秘密.C#在中文系统下允许汉字命名类,也就是我定义一个”人”,能变成啥….

下面我说两个猜想,之一段为疑稿并问,第二段为我根据您的描述自己觉得您的问题解答梁慧方式:

1.

我再看看您的问题跟楼上几位的回答以下为我个人疑问点您补充一下,,然后我回答吧:

假如说现在有个Employee的entity,那Employee是复数形式

Employee在您的思维范围内是基本的员工实体吧..我可以当作是复数也可以当作不是..

甚至单词写错亦不是我的问题或编译器能够处理的吧..所以您方便举例说明.什么是单数情况,什么是复数情况嘛?

然后就是:也就是说不能一律加s

这句话,您的意思是想干啥呢?就获取一个字符串?那很简单…

下面就看我的猜想吧

2.根据您末尾描述:

我现在有个函数,有泛型类型参数T,typeof(T).Name可以得到单数,如何得到复数?

..我差不多明白您想干啥了

尝试自己编写一个类:

我下面是手敲了,,对不对自己改正一下..

public class MyTypeofHelper

{

public static string MyTypeof-GetName(T t)

{

return typeof(t).Name

}

public static string MyTypeof-GetName(T t)

{

//这里根据类特性,获取您自定义的一个内容

例如我这边随便写了啊

t.GetField(“Names”).GetValue(t);

这样应该就行了= =好吧我也说不清楚了

然后在定义这些实体时候呢,加上一个属性即可

}

}

例如这样

public class bus

{

//你自己随便定义撒

固定定义一个

public string Names

{get{return “Buess”;}}

}

然后是什么就是什么即可

.NET本身没有这样的函数信蚂,这个涉及到英滑念埋语词法(?),typeof(T).Name能得到对象的名称,

如果你的实体类名定义成bus就是bus,要得得高者buses只能定义名buses

EF生成出慧誉来的Entity的名称默认跟你的表名是一样前搭段的。你也可以手动更改,但必枝侍须用附加属性说明映射的是哪个表!

我完全不明白你想要表达什么意思。什么需求,你说的复数形式又是什么??

请详细说明好吗?

如何优雅的进行表结构设计

数据库表的命名

使用名词作为表名

仔细想想便可发现,数据库表中存在的所有数据都是现实世界各种操作的结果,它们有的是中间过程结果,有的是最终数据结果。不论怎样,它们是一份一份没有任何动作的,静态的记录。而表本身就是存储这些记录的绝拍容器,从这样的层面理解,表名应该采用名词的形式是完全符合逻辑的。

比如我们要设计一个存储用户邀请的表,invitation 就比 invite 更加的优雅。

相关表采用统一前缀

我们知道,大型系统的设计往往按模块或者子系统进行划分,一个一个模块的处理问题,保证模块间的低耦合,模块内的高内聚。数据库表设计也一样,我们可以对相关联的表采用相同的前缀,使开发人员一眼看上去就知道哪几个表是相关的。

比如对于用户基本信息表、用户的详细信息表和用户的微信绑定表如下的命名更可取:

user

user_profile

user_wecha

字段的命名

本节先介绍几个比较通用的原则,使得字段的含义更容易理解,描述性更强,之后进行简单的总结分类,以便让我们明白这些原则背后的逻辑。

使用动词被动形式+描述性后缀

通过前面我们知道,数据库表中的所有记录都是静态的结果性数据,它是由一定的用户操作产生的。那么它是如何产生的?经过什么样的操作产生的呢?

在解答之前先看一个例子,下面是一个简单的 article 表结构:

id: integer

title: varchar

content: text

user_id: integer

create_time: timestamp

这样的设计本身是没有问题的,目前用的也很多。这个设计主要的问题是没有体现出 user_id 与这篇文章的关系,需要经过一定的猜测和思考才能得出。create_time 虽然还比较直观,但没有体现出这篇文章实在过去的某个时间创建的。

然后我们在来看修改后的设计:

id: integer

title: varchar

content: text

created_by: integer

created_at: timestamp

通过把 user_id 替换为 created_by、create_time 替换为 created_at,使得我们更容易理解对应的文章是被指定的人在指定的时间创建出来的,而不需要我们的多方猜测或者查阅文档,使得整个表结构的描述性更强。

时间区分当前时间和未来时间

英语中表时间的时候, at 一般跟一个时间点,而 in 有表示在未来的某个时间之内的意思。结合起来,笔者倾渣首向于用 at 表示过去或者现在的时间,而用 in 表示未来的时间。比如日历中的 event 有开始时间和结束时间的概念,我觉得如下的命名是比较合理的:

starts_at 事件的开始时间,相对 ends_in 它属于当前时间,采用 _at 后缀

ends_in 事件的结束时间,相对 ends_in 它属于未来时间,从用 _in 后缀

其他我们比较常用的比如 created_at、updated_at、expires_in 都属于这种类型。

使用第三人称单数

当我们采用动词+介词的时候我更倾向与使用第三人称单数,因为字段描述的这个并梁羡实体是单数的,通过使用第三人称单数,我们可以自然语言的方式表达出需要的意思。比如以 event 为例,翻译成英语是这样的:

The event starts at:00:00

完全符合英语的语法,也表达了想要表达的意思。

区分单数与复数

单数与复数主要是对字段内容的描述,比如通知(notification)有接收人这个字段,如果我们需要通知能够发送给多个人,那么 receivers 这样的字段名称明显好于 receiver,因为 receivers 体现了通知可以发送给多个人这一个事实。

前面从四个原则出发介绍了如何让字段更具有描述性,简单总结下来我觉得从语义上来说,字段可以分为两种类型:描述性字段和动作性字段。

描述性字段是对对应数据库记录(或者说实体)的补充说明,比如以人作为实体,那么人的身高、体重和血压就属于这类描述性字段。

描述性字段如果是动词+介词的形式,动词需要采用第三人称单数的形式,比如 starts_at。然后根据字段的内容,如果内容有多个元素或实体,我们需要使用复数,否则使用单数形式。

动作性字段不仅能对所属实体进行补充说明,还能对这个实体的所涉及操作有所描述。比如我们有 article 这个实体, article 的 created_by 和 created_at 就属于动作性字段,因为它不仅表达了 article 的创建者和创建时间这层信息,它还表达了这个 article 是指定的人被创建的,而不是凭空生成的。

关于数据库 表名 单数复数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 数据库设计要注意表名单数复数的区分 (数据库 表名 单数复数)