数据库表字段设计---多位设计不符合设计规范吗?

流年轻描淡写的伤 2018-04-28 10:03:15
心塞塞,昨儿提了个解决方案被否了,理由是不符合产品设计规范;
需求如下:表里想设计一个状态字段status,这个状态包括的值有:1设计,2变更,3执行等,然后由于并发的问题,需要给状态加锁的标志位,意思就是并发状态下,有一人在执行时,先给状态加锁,其他人就不能对该条数据进行其他相关操作了。
我的方案是:状态列设计为两位的存储方式,第一位用来表示状态的使用值,第二位用来表示是否锁住,类似于10表示设计状态下没有锁,11表示设计状态下加锁。我觉得没有必要再加一个字段去标识是否加锁,数据库本身的字段就很多了,而且我认为这锁状态和原有状态是一种组合的方式。
这种一个字段多位的处理方式在我之前几家公司都有用到过。可是这里却说这样的设计不符合规范。
我查了数据库设计规范,第一范式要求属性具有原子性,不可拆分,难道说我这样的设计是不符合第一范式的要求?
望大牛指点~
...全文
827 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuangGod 2021-07-13
  • 打赏
  • 举报
回复

一个字段包含了多个含义,这是最典型的糟糕设计;可以多去了解一些设计原则,例如经典的单一职责。

qq_598206408 2019-03-05
  • 打赏
  • 举报
回复
数据库的字段要不可再分
ACMAIN_CHM 2018-05-02
  • 打赏
  • 举报
回复
不符合第一范式的要求
  • 打赏
  • 举报
回复
一个字段存储多个信息,是极差的设计,你说判断一列就可以,但是你要解析这列的信息,才知道结果。比如你说10,11,至少你要从10,11中解析出后一位才知道是不是锁住。 如果是独立一个字段存储,在面向对象的编程中,有orm去取数,你只需要判断IsLock属性(假设是这个属性)就行了。 而且,如果一个字段存储多个信息的思路漫延到整个系统里,后期扩展,修改将是一个灾难。
卖水果的net 2018-04-28
  • 打赏
  • 举报
回复
步骤类型是“创建”还是“审批”,这个数据,在数据插入后,就不应该再有改动了。 状态,放在另外一列,可以随时做更改。 另外要说的是,把两个字段放在一起,在程序中,你还是有拆分两个字段的可能。
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
一、确实不符合第一范式,一个数据项目包含了两个信息。 二、操作也比较复杂,不利于程序的扩展。 三、利用数据库自身的锁机制,就可以实现这个锁的需要,没必要增加新的字段。
但是这两个信息是有关联的呀,就好比一个大流程其中有步骤叫创建和审批,创建步骤又包含创建成功和创建失败两个状态,审批又包含审批通过和审批不通过两个状态,那这个时候,在设计数据库表字段的时候也是要设计成两个字段,一个字段用来存步骤是创建还是审批,另一个字段存结果是成功还是失败吗?那不能用一个字段的第一位表示步骤,第二位表示状态,这样吗?
卖水果的net 2018-04-28
  • 打赏
  • 举报
回复
一、确实不符合第一范式,一个数据项目包含了两个信息。 二、操作也比较复杂,不利于程序的扩展。 三、利用数据库自身的锁机制,就可以实现这个锁的需要,没必要增加新的字段。
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
步骤类型是“创建”还是“审批”,这个数据,在数据插入后,就不应该再有改动了。 状态,放在另外一列,可以随时做更改。 另外要说的是,把两个字段放在一起,在程序中,你还是有拆分两个字段的可能。
数据初始插入的时候肯定是创建啊,创建成功了,才能审批,所以不管是步骤还是状态都是会改变的。审批之前肯定要校验数据是否处在创建步骤,并且状态为创建成功,才能进行审批,那这个时候,分两列就要查两个字段,并同时判断两个字段都满足,如果放在一个字段里,就只要查询判断一列就可以了。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧