您知道如何在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 您对这里的命名约定有什么建议吗?
答案 0 :(得分:7)
你对命名约定永远不对(或错)。当您从雇主到雇主时,您将在每个工作场所遇到不同的惯例,您将始终必须适应。您已经说明了自己喜欢的内容,因此在处理自己的项目时,只需使用它,除非您的系统是基于其他内容构建的,它始终使用其他约定。然后我会说你最好在那个项目中使用那个约定。一致性>偏好。
答案 1 :(得分:3)
如果你不喜欢这个想法,请保持冷静 但您是否认为列名独立于表名?
语义将是:
“如果两个字段被称为startDate和endDate,那么它们会指定确定当前表所考虑的时间段的日期。”
这种语义通常会跨越表格,因此具有一致的名称是好的。
也许有些人说他们仍然明白这个公共列名是否以表名为前缀。但是在几个用例中,我们被这种情况所困扰,并且更喜欢:
ORM非常擅长让你定义一次字段,然后创建自动拥有该字段的子类(也使用合成)。数据库没有子类化,但
某些请求是自连接,两次连接同一个表,因此在每种情况下都需要为表名使用别名。
大多数其他手动编码请求会连接多个表。此命名策略将增加两列具有相同名称的可能性,因此需要使用别名。那是问题吗?我认为这不是因为:
答案 2 :(得分:2)
您显示的两种命名约定都是完全可以接受的。 writingLikeThis更容易输入,但writing_like_this更容易阅读。最重要的是一致性。选择一个命名约定并坚持下去。