2011-09-18 87 views
1

我一直在关注我的数据库的以下命名约定。数据库命名约定

  1. 所有表名的小写字母和复数。
  2. 表中的_(Underscore)定义了与父表的关系。
  3. _(Underscore)列中定义了一个外键。

因为我更喜欢使用表和列的描述性名称,我经常发现我自己使用camelCasing的实体有两个或更多的单词,并没有定义任何关系。例如。

lastVisitIp 
lastVisitDate 
registrationDate 

坦白说我真的不喜欢使用驼峰规则,因为我觉得这是有点丑陋这样做,我不知道为什么的想法。

我想从专家那里知道你在这种情况下命名专栏是什么?我应该继续使用骆驼套管,我应该使用Underscore(_)还是其他选择。

P.S:我检查了Wordpress中使用的命名约定,他们使用(_) Underscore作为多用途。 :)

谢谢。

回答

3

我发现复数可以使事情变得复杂,在用户表或'ies'的情况下,表名是公司的情况下,coz plulars可以是's'。所以最好始终坚持单数。同样在sql加入声明时,我倾向于与Users.user_id = Companies.owner_id错误,但不会与User.user_id = Company.owner_id错误,因为您必须始终关注“s”和“ies”。

下划线的首选方法,因为列名可以由很多的话

is_user_registered_last_year Vs的isUserRegisteredLastYear

,你可以有更多的字母其 难读骆驼看到。

+0

好多解释。谢谢你.. –

1

要一致

如果您要使用前缀,请在任何地方使用它。如果您要将外键添加到另一个表中,请在每个地方使用相同的列名称。如果你打算用下划线分开单词,那么到处都是。

你如何构建你的命名约定取决于你,只是保持它的逻辑性,所以当你回来几个月后,你知道表是做什么的。

我自己,我使用下划线,我到处都是,所以一切都很有意义。

1

我在想昨天对于我即将开始的一个新的大项目完全一样,我得出了相同的结论:使用_来定义关系和FK,骆驼案件的一切。例如:

party 
partyPerson 
partyOrganization 
partyPerson_partyOrganization (how a person relates to an organization) 
partyOrganizationLegal 
party_address 
party_contactMechanism 
address 
contactMechanism 

如果您强调所有内容,将很难找到什么是参考,什么不是。

我也认为你应该在任何地方使用单数名称(这是更合乎逻辑,不太可能混淆你)。

+0

我遵循复数因为cakePHP建议使用它,即使我不使用框架。我需要改变时间并开始使用复数形式。 –

+0

@Ibrahim:Cake使用复数形式,因为RoR使用复数形式,但他们都有不同的魔法为他们工作。 =) –

2

我明白这是一个旧帖子,但我想补充我的两分钱。

如果可能,数据库表应尽可能以复数形式命名,但要尽量保持对它们的某种敏感性,以便名称能够指示内容,以便容易识别。

举例如下。

您的应用程序中有用户,您的型号为User,因为它指的是单个用户,因此数据库表为users,因为它是单个用户的集合。现在说你有这些用户的配置文件,在命名时有几个选项,但我觉得很适合。

  1. 你可能会被命名此表users_profiles,但读的时候,这可能意味着一个一对多的关系,是它的用户配置文件。
  2. 你也可能会试图命名这个表user_profile,这表明它是一对一的关系,但另一方面,它暗示着这个表不是一个集合,而是一个单一的配置文件用户。
  3. 相反,最好的命名约定是user_profiles,因为它是用户配置文件的集合,即一个配置文件与一个用户相关。

在你要引用原始用户此配置表,让你有一个叫user_id,不users_id列,但user_id。至于任何其他列名称,您应该尝试将它保留为一个单词,全部小写。如果您无法使用单个单词命名此列,请将其视为变量并将其命名为下划线。这是有益的,因为在有多个列的第一个词相同的情况下,它会创建一个子集合,暗示它们是相关的,这是正确的。

的确,下划线意味着一种关系,这就是为什么该表被称为user_profiles,并且该字段被称为user_id,但是10次中有9次,您不会在字段上没有关系一个id,所以暗示的问题就消失了。

以上提到的总是使用单数作为复数可能会造成混淆。争论是复数可以在sies结束。值得注意的是ies确实在s结束,所以这个问题是一个误用。最重要的是,将表名保存为单数,实际上会产生更多混淆,因为它并不意味着一个集合,它的确意味着表名可以以任何其他字母结尾。

有些表格的名字会暗示复数形式,没有以s结尾。例如,这可能类似于user_history。这个表名是一个完全可以接受且易于识别的名称,因为历史记录默认为复数,并且此表包含用户的历史记录。

事情不要做

  • 混合下划线和案件。选择一个标准并遵循它,不要将CamelCase列与下划线结合在一起,因为它可能会造成混乱,并且看起来很乱。
  • 保持一切小写。没有必要使用大写字母,因为它只能增加混淆,对待表格和列名称就像是口语或书面句子的摘录,但显然要用下划线替换空格。

正如您在这里的所有回复中所看到的,有许多不同的选项,其中一些具有优点,一些没有。这个特定的方法是我遵循宗教的方法,据我所知,它是PHP最常用的方法。它保持整洁,容易理解,很少,如果有的话,我看到一个表名,不知道它做了什么。

希望能帮助别人。