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

时间:2011-10-29 12:32:48

标签: 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)
)

遵循所有列的排序约定是否有任何最佳实践(例如,按字母顺序排列或顶部不是空值,底部是其他列)

6 个答案:

答案 0 :(得分:2)

当然主键是第一 该列的名称通常是 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

  

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

不,不是真的。它非常灵活,可以按照您的意愿对列进行排序。

我认为主要的惯例是确保您将primary_key作为表格中的第一列。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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