繁体   English   中英

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

[英]Best practices for ordering columns in SQL when creating the 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)
)

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

当然首先是主键。
该列的名称通常是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
)

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

但是...大免责声明......

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

这里另一个热门话题是列名命名约定。 这是一个完整的'其他话题,但我会说,除非被迫,否则不要缩写!

不仅没有真正的惯例,而且最好不去考虑一个。 例如,有时插入查询在假定您要更新每个字段时不会指定字段名称。 但是,您必须以假定的顺序指定值。 这很容易出错。 因此,考虑它的最佳方式是,“这些列存在于此表中,没有特别的顺序。”

不,不是真的。 它非常灵活,可以按照您的意愿订购您的色谱柱。

我想主要的约定是确保将primary_key作为表中的第一列。

我有个人从未听过或看过这样的约定。 用于数据库列的唯一约定通常是命名约定(通常在一个组织与另一个组织之间不同)和数据类型映射。

然而,惯例就是它们的本质。 因此,如果您按字母顺序对列进行排序是正确的,请执行此操作。

我会说,这并不重要,而且是品味问题。

您希望确保在频率查询中使用的索引中使用相同的列顺序,但这就是全部。

据我所知,没有。 如果有任何相关的,唯一的描述性名称字段,我个人更喜欢将主要(通常是代理)密钥放在前面,后面跟着名称/描述(用户的用户名,产品的产品名称)。 然后是逻辑父级的外键(订单行的orderid),如果有的话。 在那之后,我以最适合我的方式命令它们,通常将相关字段分组(lastEditDate和lastEditedBy彼此相邻)。 我认为按字母顺序排列列没有充分的理由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM