在创建表时在SQL中对列进行排序的最佳实践

pri*_*iya 5 mysql sql create-table

我有一个表foo,其中包含以下列

create table foo (
id integer not null auto_increment unique,
name varchar(255),
desc varchar(255),
modified_time datetime not null,
type tinyint(1)
)
Run Code Online (Sandbox Code Playgroud)

是否有遵循所有列的排序约定的最佳实践(例如,按字母方式或顶部不为空,底部为其余列)

Mic*_*ant 4

肯定是主键第一
该列的名称通常是tablename _id (传统)或只是“id”(rails 等框架首选)。

如果使用的话,通常接下来是名称/描述字段,正如您所拥有的那样。

我倾向于将外键放在后面(先是父母,然后是孩子),因为它们在开发过程中往往更加关键。

然后我将其他数据(例如地址行、城市、州、邮政编码)分组在一起。

当没有其他规则适合时,我倾向于选择更高的必填字段以提高可见性。

时间戳(部分/全部created_on、updated_on、removed_on等)通常最后

所以在你的例子中我实际上会这样做:

create table foo (
id integer not null auto_increment unique,
name varchar(255),
type tinyint(1),
desc varchar(255),
modified_time datetime not null
)
Run Code Online (Sandbox Code Playgroud)

注意 - 正如 Kolink 所指出的,使用描述而不是 desc,因为 desc 是一个保留字,意思是降序,例如order desc

然而...很大的免责声明...

如果您的表随着时间的推移(即现实世界)而变化,并且您有现有的生产数据,那么您将不会按照最初“计划”的顺序排列字段。这可以通过导出和重新导入来避免,但在许多情况下,最好接受排序只是为了程序员方便而进行的初始创建的约定,仅此而已。

这里另一个流行的主题是列名命名约定。这是一个完全不同的话题,但我会提醒大家,除非被迫,否则不要缩写!