1

你知道如何在 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;

我对吗?

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

4

3 回答 3

7

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

于 2009-12-04T14:26:13.947 回答
3

如果您不喜欢这个想法,请保持冷静,
但是您是否考虑过独立于表名的列名

语义

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

该语义通常跨表,因此具有一致的名称是好的。

实施问题

在数据库中

可能有些人说,如果那个普通的列名以表名为前缀,他们还是明白的。但是在几个用例中,我们被这个咬了,更喜欢:

  • 对于您有效地使用元请求(例如,创建一个请求以读取所有名为 startDate 的列,或查找所有使用某些参考数据的表),固定名称要容易得多。
  • 如果名称是固定的,存储过程或触发器也可以更容易地重用。

甲骨文

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

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

需要别名

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

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

  1. 无论如何,通常建议使用别名,并认为是良好做法
  2. 在这两种情况下使用别名可以实现更一致的编码环境。
  3. 与表名相比,使用别名有一些优势
    :可以允许长而清晰的表名,包括按“模块”对表进行分组的前缀,因为可以在请求中使用较短的别名。
    湾。虽然表名对于访问数据库的所有应用程序的所有模块都是固定的,但应用程序或模块可以在其请求中使用不同的别名,从而允许在请求中提供更多语义(就像在代码中选择命名变量一样,使用相同的规则)。
于 2009-12-04T15:00:45.687 回答
2

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

于 2009-12-04T14:35:55.740 回答