问答题

某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。

通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(Redis)的混合架构实现。

经过规范化设计之后,该系统的部分数据库表结构如下所示。

供应商(供应商ID,供应商名称,联系方式,供应商地址)

药品(药品ID,药品名称,药品型号,药品价格,供应商ID)

药品库存(药品ID,当前库存数量)

订单(订单号码,药品ID,供应商ID,药品数量,订单金额)

王工认为,反规范化设计可提高查询的性能,但必然会带来数据的不一致性问题。请用200字以内的文字说明在反规范化设计中,解决数据不一致性问题的三种常见方法,并说明该系统应该采用哪种方法。
【正确答案】

解决数据不一致性问题常用的方法是批处理维护、应用逻辑和触发器。

批处理维护是指对复制列或派生列的修改积累一定的时间后,运行一批处理作业或存储过程对复制或派生列进行修改,只能在对实时性要求不高的情况下使用。

应用逻辑实现数据一致性就要求必须在同一事务中对所有涉及的表进行同步增、删、改操作。同一逻辑必须在所有的应用中使用和维护,容易遗漏,不易于维护。

触发器:对数据的任何修改立即触发对复制列或派生列的相应修改。触发器是实时的,易于维护,是解决这类问题的最好的办法。

该系统应该采用触发器

【答案解析】zset和set类似,都是存储无序不重复的数据。但是zset会带有一个分数score,可以根据score去排序。