单数或复数数据库表名?

lal*_*007 55 mysql sql sql-server

完全重复

表命名困境:奇异与多个名称

使用单个或多个数据库表名更好吗?有接受的标准吗?

我听到过支持和反对的论据,你们有什么想法?

Tim*_*son 111

单数,所以你可以:

  • 顾客
  • CustomerAddress
  • CustomerAddressAuditTrail

等等

  • 绝对单数.+1 (18认同)
  • CustomersAddresses,CustomersAddressesAuditTrails :) (6认同)
  • Plural:Customers .. CustomerAddresses,CustomerAddressAuditTrails ..你不会复数每个单词,只是对象名词 (6认同)
  • 单数+1.使用它们的代码肯定会使用单数作为类名,我喜欢我的名字,以匹配相同的东西. (5认同)
  • @Russ Cam:很抱歉,除了这听起来很糟糕之外,表存储的实体是"CustomerAddress".可能存在多个事实的事实是固有的,无需在表名中反映出来. (5认同)
  • 他为什么在世界上选择复数名称作为最佳答案?表名应该是单数.客户...其客户表有很多客户记录.多元只是没有任何意义.拥有一个像用户这样的表然后有一个主要的自动包含user_id/users_id ...将是表user.user_id ...对我来说是最有意义的也没有意义.我一直用复数,直到我意识到复数作为表名没有意义.想想"SELECT*FROM {customer table} WHERE customer_id = 1",其中"SELECT*FROM {customers table} WHERE customer_id = 1". (2认同)
  • @Tek实际上,只有一个人用"审计审判"错误拼写了"审计线索"......;) (2认同)
  • @Tek说真的,什么是审计审判?:) (2认同)

Gul*_*zim 75

恕我直言,表名应该像客户一样复数.

如果类名映射到Customers表中的行,则类名应该像Customer一样.

  • 完全正确. (15认同)
  • 尽管实体包含集合,但表仍然是单个实体.我想的越多,多元化的表格名称就越有意义. (11认同)
  • 多个表名是多余的! (9认同)
  • 一个小小的警告/建议 - 名称包含几个单词,你应该多元化它在语言意义上而不仅仅是整个事物.以下为例,我将使用:客户CustomerAddresses(它是多个地址)CustomerAddressesAuditTrail(地址保留复数,因为它是适用于CustomerAddresses的审计跟踪) (6认同)
  • Yoooder:在英式英语中,集体对象通常是语法复数,例如,"委员会无法同意"与美国英语"委员会无法达成一致".所以我假设英国人可能更愿意使用单数名词来收集事物. (3认同)
  • 请不要介意人们告诉你采用某种风格,最好定义自己的风格,并且通常遵循你使用的语言,工具,IDE和框架的实践. (2认同)
  • 我认为复数读起来更容易...... SQL 更像英语......从客户中选择 *,其中名字 = 'Jamie' 会说我正在从名字为 jamie 的客户池中进行选择。它包含多个客户,它可能返回多个客户..使其复数 (2认同)

Mar*_*rkR 30

我喜欢单数名字,但似乎是少数.

  • 是的,我们是:) +1 (5认同)
  • 我不知道它是少数:第一个答案是复数,第2-4个是单数.单数的总投票数远远高于复数的总投票数.答案编号2的投票计数高于编号1的投票计数.表名称应为单数.customer表包含所有客户的名称,它被称为customer表,因为它的名称是"customer",而不是"customers". (4认同)
  • 我正在改变立场.我和你在一起,因为它是一个单一的名字.您可以从窗口小部件表中选择多个窗口小部件,但表本身不是窗口小部件 - 它只包含它们. (3认同)
  • 我和你在一起,但不是因为我喜欢他们 - 只是因为我们几乎都是单数 (2认同)

Mat*_*ttK 17

我个人的理念是,使用复数数据库表名称是多余的,除非您只计划表格包含一行.

  • select*from customer似乎"语法上"对我不正确...... (23认同)
  • @Arnshea:但是当你想到你在伪代码中做什么时说"获得桌面客户的所有部分"也没有意义. (5认同)

wcm*_*wcm 12

我喜欢使用像Agent这样具有PK名称的单一名称.

但那只是我:o)


Adr*_*ore 11

我喜欢使用复数形式,因为一个表包含几个实体,所以对我来说似乎更自然.

Linq to SQL在创建数据实体时将复数表格表名称转换为单数.我假设如果他们认为表格名称的复数形式不好,微软就不会实现这个功能.

  • 不,你乘坐一辆公共汽车.但是,如果要在一个总线表中存储多个总线,则表名应为复数.调用表"总线"虽然它实际上包含几个总线是没有意义的恕我直言. (6认同)
  • 所以拥有其他东西的东西应该是复数?"我坐上了公共汽车,取出了我的纸巾箱,吹满了充满绿色东西的鼻子." (2认同)
  • @Nestor:一个鼻子作为数据实体,一个表中有几个鼻子.我害怕看不出问题. (2认同)

Ale*_*oun 9

在我现在的公司,我们使用Plural作为表名.原因是:如果我们有一个Customers表,我们将每行视为Customer,因此表本身就是一组客户.

  • 桌子本身就是顾客吗?不是客户表吗? (9认同)
  • 所以,我将有一个从表 TEETH 读取的 TOOTH 类,并且具有映射到 TEETH.THOOTID 的属性 TOOTH.THOOTID...在我看来更像是语法类而不是编程 (4认同)

Rob*_*Rob 8

嗯,很明显你的数据库表名具有绝对一个"标准"的方式,我将以往随意定义为命名.

首先,所有表名都应以"t_"为前缀.在此之后,StudlyCaps中的单数实体名称,例如"Customer".紧接着,这将包含在模式的第一个版本中创建的列数,用于历史目的,后跟下划线,以及数据的精确正常形式; BCNF的"1","2","3"或"B".任何较高的正常形式应用"P"表示.

可接受名称的一些示例是:

t_Customer_6_3
t_Order_5_B
t_OrderLine_4_2
Run Code Online (Sandbox Code Playgroud)

我认为我的观点是,它确实无关紧要,只要名称具有合理的描述性并且命名是一致的.

  • 如果这是slashdot,我会说+5搞笑...... (4认同)
  • 提升机智,并以*粗体*突出显示您的观点.即便如此,有人也错过了它...... (3认同)

HLG*_*GEM 5

最重要的是要保持一致.令人讨厌的是必须记住哪些表是复数,哪些表不是.你的字段名称也一样,选择一个stadard并使用它.不要让穷人开发人员必须确定这个表是否使用person_id或personid或者personid或person $ id等.当你没有标准试图记住哪个表使用时,浪费的时间是惊人的什么.