老师,请教下数据库结构设计?
教程中的数据结构设计有用到 decimal
来存储金钱,也用到了外键。
而我所在的公司对数据结构设计有规范:
- 时间类字段使用10位时间戳,created_at,updated_at,deleted_at这类的都存bigint型
- 必须把字段定义为NOT NULL并且提供默认值
- 禁止使用小数存储货币(统一用int存储,精确到分)
- 禁止使用ENUM,可使用TINYINT代替
- 禁止使用外键,如果有外键完整性约束,需要应用程序控制
还要求了所有删除操作必须使用软删除,因为时间是整型,而且不能为null,默认为0,我们把 SoftDeletes
、SoftDeletingScope
这两个文件都修改了。
看到这里就有很大的困扰,关于上面5个规范要求,在比较正式、商用的项目上,正确、建议的做法应该是怎样的?
我个人对5个规范的想法是:
- 时间应该用laravel默认的时间格式,一目了然,用
Carbon
处理其实很方便,而且mysql对date类型已经做了足够优化,占用空间已经不是问题了...吧... - 字段不允许为null 应该是索引性能之类的原因,其实也众说纷纭
- 金钱存储应该是decimal 和 int精确到分都可以吧,只是1要团队商量好,2是int型存库和读取时要乘100和除100. 还是想知道哪种更优啊
- 不理解,网上也众说纷纭
- 不理解,有外键删除的时候可能会报错,不知道是不是这个原因....
求老师解答,鞠躬
@aen233 没有大公司的命,得了大公司的病,那能有什么办法……