起名字这个事情很麻烦,没有一些原则的情况下很容易就出现一些奇奇怪怪的名字。

记录一下我设计数据表和字段的几个原则。基本上也是 laravel 默认的行为。

  • 数据表名字为名词复数,users, posts, factories。

    很好理解,因为是个表嘛,一条记录是一个user,那么一张表就是users。不要加什么前缀了,基本上一个项目一个数据库了,xx_users的目的是啥啊。
    
  • 关联关系的字段为名词单数 + 下划线id,user_id, post_id, factory_id。

  • 布尔类型表示标志位的用is + 下划线 + 加形容词。is_valid, is_paid。
  • 记录时间的timestamp字段,过去式 + at,paid_at, expired_at, published_at。
  • 看情况使用枚举enum

    这里有两种观点,一个是tinyint,一个是枚举。tinyint的问题是数字本身没有意义,我必须得找个地方去定义这些个数字,STATUS_PENDING_PAY = 0, STATUS_PAID = 1。基本上也都是定义在模型中了。
    但是枚举就很方便,pending_pay, paid, 本身有意义。
    
    http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/
    
    这里也有很多讨论,实在很纠那么就如上所说,不经常变得,选项比较少的,不使用数字的情况下,使用严格模式的enum。其他情况使用tinyint,个人还是很喜欢有意义的enum的。
    
  • 如果使用枚举定义个状态之类的字段,那么我习惯用动词进行时和过去式,比如pending_pay, paid,successed,canceled。或者全部大写。