退款状态或者物流状态的选项,是使用数据字典存储数据库呢?还是使用静态数组?

比如:物流状态有三个选项: pending、 delivered、received, 分别代表:未发货,已发货,已收货。
php开发中使用静态数组

    const SHIP_STATUS_PENDING = 'pending';
    const SHIP_STATUS_DELIVERED = 'delivered';
    const SHIP_STATUS_RECEIVED = 'received';

    public  static  $shipStatusMap  =  [  
                self::SHIP_STATUS_PENDING  =>  '未发货', 
                self::SHIP_STATUS_DELIVERED  =>  '已发货',  
                self::SHIP_STATUS_RECEIVED  =>  '已收货', 
    ];

我的问题是:如果把物流状态的选项,设计成数据字典,存储数据库,有什么优缺点?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
leo
最佳答案

@matteao 这种方式极其地愚蠢,因为我们的代码是依赖于这些状态的,数据库里少了状态代码运行不起来,新增加的状态如果没有同步修改代码则一点意义都没有。

当然对于那些与代码逻辑无关的选项,这种方式则没有问题。

4年前 评论
讨论数量: 4
leo

你说的『数据字典』是指在数据库中用数字来代表么?这种方案的优点是省空间、索引快,但是可读性极差,特别是当有很多个表有这样的数据字典,一个表里有多个字段有这样的数据字典的时候几乎没有人能记得住各个数字代表什么,这个在线上 debug 问题时,特别是修复紧急问题时,会成为影响解决问题速度的因素之一。

4年前 评论

@leo
我的想法是这样:数据字典
比如说物流信息:我会把数字1 ,以及数字1代表的未发货 三个中文字都存入数据库。
在一些java 项目会见到,维护一个系统字典表,用于下拉选项之类的。
我不知道其中的优缺点?

4年前 评论
matteao (作者) (楼主) 4年前
leo

@matteao 这种方式极其地愚蠢,因为我们的代码是依赖于这些状态的,数据库里少了状态代码运行不起来,新增加的状态如果没有同步修改代码则一点意义都没有。

当然对于那些与代码逻辑无关的选项,这种方式则没有问题。

4年前 评论

@leo 明白了,我会排查一下我的应用场景,实际操作一下。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!