当涉及DB表中的列顺序时,是否有任何标准或至少最佳做法?
这是一个手工制作的惯例,我遵循:
>主键(即id);
>唯一列(即电子邮件,ssn);
>外键(即物品);
>列保存用户生成的数据(即first_name,last_name);
>列保存系统生成的数据;
>非布尔值(即password_hash);
>布尔值(即删除,验证)
> timestamp列(即created_at);
这些留下许多问题没有答案,所以我想听听你的想法.
解决方法
简而言之,您已经很好地说出了标准约定,并没有错过很多.海事组织,唯一可能会让某人看起来不专业的举动将不是首要的主键.在这之后,外键正好是一个很好的惯例,但不是很大的事情. (包括外键的多字段主键当然应该是在刚开始的时候,或有人应该被殴打.)我还会再增加两个想法:
>有相似主题的领域彼此靠近.例如,将City / State / Zip字段广泛分开是无益的.我觉得user_role或user_ip是否先到了,但是他们听起来应该是彼此相邻的,这并不重要.
>继续使用其他这样的惯例,它不会伤害字母字母的东西.
在数据库中附加的约定是一个很好的主意(就像你所提到的那样,始终在最后有时间戳).如果您在许多表格中有ChangeDate和ChangeBy字段,让它们(彼此相邻,并且一致)位置很好.
另外,ErikE提到,在表的最后,可能会有一些效率,它们可能包含空值的变量长度字段(varchar,nvarchar).除此之外,我不认为在现代关系数据库中以某种方式安排事情有任何性能优势.
命名
通常,当您决定列顺序时,您决定列名称的同时,所以我想解决一点.你当然可以用命名你的领域做出可怕的代价高昂的错误;这比您的列排序要重要得多.订单可以轻松更改,但名称不佳将永远导致您的问题.一年后改变表/列名称是一个巨大的痛苦,当时有十几个参考.我刚刚添加了一个答案here来解决这个非常重要的话题.