mysql表设计问题

clipboard.png
上图的职位亮点我们把他当成多选搜索来看。
发布一个职位,职位的待遇是多选。我想问一下大家,遇到这种满足多属性的时候怎么建表:
1、每个属性设一个字段,用0和1来表示
2、把属性id用explode逗号隔开存数据库
3、另取一张表,1对多(职位ID:属性ID)来存储,

那种方法便于扩展,或者对SQL速度有好处

阅读 2.6k
4 个回答

个人建议第一种方案

  1. 方便扩展,如果有新的属性,直接给数据库表添加一个字段即可
  2. explode的方式不仅在php层多做了一次处理,并且在mysql中看起来不直观,我想看某个职位有哪些属性,还得去另一个表去看id对应哪个属性
  3. 再建一个一对多的表理论上也是可以的,但是这里没有太大必要,反而会增加数据库读取的工作量,

从关系数据库理论出发的话可以使用第三种方案,职位与职位亮点建立多对多关系,但是如果你不使用数据库来维护关联关系的话,做查询操作的时候就头疼了;

第一种方案好像不太靠谱,加多/减少一个亮点数据表就要加多/减少一列;

如果不使用数据库来维系关联关系的话可以使用第二种方案,少一张中间表;

第三种好,加属性只要添加记录即可,不用改表结构

推荐第三章方案吧,另外建表,跟现有的职位表是1多关系,查询的时候直接连表查询,也不会有很大的性能和速度劣势。况且还更好维护这个亮点。第一种方案明显是最不科学的方案,数据库读取并不会有太大问题,反而这样清晰的解构更方便后期的维护和操作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题