数据库,表和列命名约定

时间:2009-12-04 14:20:26

标签: naming convention

您知道如何在mysql数据库中使用命名约定吗?我已经下载了一个mysql示例数据库。

这是:

CREATE DATABASE IF NOT EXISTS classicmodels  DEFAULT CHARACTER SET latin1;
USE  classicmodels ;
DROP TABLE IF EXISTS  customers ;
CREATE TABLE  customers  (
   customerNumber  int(11) NOT NULL,
   customerName  varchar(50) NOT NULL,
   contactLastName  varchar(50) NOT NULL,
   contactFirstName  varchar(50) NOT NULL,
   phone  varchar(50) NOT NULL,
   addressLine1  varchar(50) NOT NULL,
   addressLine2  varchar(50) default NULL,
   city  varchar(50) NOT NULL,
   state  varchar(50) default NULL,
   postalCode  varchar(15) default NULL,
   country  varchar(50) NOT NULL,
   salesRepEmployeeNumber  int(11) default NULL,
   creditLimit  double default NULL,
  PRIMARY KEY  ( customerNumber )
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

编辑:

我更喜欢:

    CREATE DATABASE IF NOT EXISTS classic_models;
    USE  classic_models ;
    DROP TABLE IF EXISTS  customers ;
    CREATE TABLE  customers  (
       customer_number  int(11) NOT NULL,
       customer_name  varchar(50) NOT NULL,
       -- or i define the column name this way:
       name varchar(50) NOT NULL, -- NOT customerName and NOT customer_name
       PRIMARY KEY  ( customer_number )
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我是对的吗?

我推荐一篇来自FarukAteş的文章:sql convention 您对这里的命名约定有什么建议吗?

3 个答案:

答案 0 :(得分:7)

你对命名约定永远不对(或错)。当您从雇主到雇主时,您将在每个工作场所遇到不同的惯例,您将始终必须适应。您已经说明了自己喜欢的内容,因此在处理自己的项目时,只需使用它,除非您的系统是基于其他内容构建的,它始终使用其他约定。然后我会说你最好在那个项目中使用那个约定。一致性>偏好。

答案 1 :(得分:3)

如果你不喜欢这个想法,请保持冷静 但您是否认为列名独立于表名

语义

语义将是:
“如果两个字段被称为startDate和endDate,那么它们会指定确定当前表所考虑的时间段的日期。”

这种语义通常会跨越表格,因此具有一致的名称是好的。

实施问题

在数据库中

也许有些人说他们仍然明白这个公共列名是否以表名为前缀。但是在几个用例中,我们被这种情况所困扰,并且更喜欢:

  • 要使用元请求(例如,创建一个请求来读取所有名为startDate的列,或者找到所有使用某些参考数据的表),固定名称会更容易。
  • 如果名称已修复,也可以更轻松地重复使用存储过程或触发器。

ORM

ORM非常擅长让你定义一次字段,然后创建自动拥有该字段的子类(也使用合成)。数据库没有子类化,但

  • 如果映射在类上的各种表对列使用相同的名称,则一切都很自然。
  • 否则,您必须手动编码(或声明)代码中的startDate在数据库中实现为XXXStartDate或XXX_start_date ......

要求别名

某些请求是自连接,两次连接同一个表,因此在每种情况下都需要为表名使用别名。

大多数其他手动编码请求会连接多个表。此命名策略将增加两列具有相同名称的可能性,因此需要使用别名。那是问题吗?我认为这不是因为:

  1. 通常建议使用别名,并考虑良好做法
  2. 在两种情况下使用别名都可以实现更一致的编码环境。
  3. 使用别名比表名更具优势:
    一个。可以允许长而清晰的表名,包括通过“模块”对表进行分组的前缀,因为可以在请求中使用较短的别名。
    湾虽然对于访问数据库的所有应用程序的所有模块都修复了表名,但应用程序或模块可以在其请求中使用不同的别名,从而允许在请求中提供更多语义(就像选择命名一样)代码中的变量,具有相同的规则)。

答案 2 :(得分:2)

您显示的两种命名约定都是完全可以接受的。 writingLikeThis更容易输入,但writing_like_this更容易阅读。最重要的是一致性。选择一个命名约定并坚持下去。