上图的职位亮点我们把他当成多选搜索来看。
发布一个职位,职位的待遇是多选。我想问一下大家,遇到这种满足多属性的时候怎么建表:
1、每个属性设一个字段,用0和1来表示
2、把属性id用explode逗号隔开存数据库
3、另取一张表,1对多(职位ID:属性ID)来存储,
那种方法便于扩展,或者对SQL速度有好处
上图的职位亮点我们把他当成多选搜索来看。
发布一个职位,职位的待遇是多选。我想问一下大家,遇到这种满足多属性的时候怎么建表:
1、每个属性设一个字段,用0和1来表示
2、把属性id用explode逗号隔开存数据库
3、另取一张表,1对多(职位ID:属性ID)来存储,
那种方法便于扩展,或者对SQL速度有好处
从关系数据库理论出发的话可以使用第三种方案,职位与职位亮点建立多对多关系,但是如果你不使用数据库来维护关联关系的话,做查询操作的时候就头疼了;
第一种方案好像不太靠谱,加多/减少一个亮点数据表就要加多/减少一列;
如果不使用数据库来维系关联关系的话可以使用第二种方案,少一张中间表;
推荐第三章方案吧,另外建表,跟现有的职位表是1多关系,查询的时候直接连表查询,也不会有很大的性能和速度劣势。况且还更好维护这个亮点。第一种方案明显是最不科学的方案,数据库读取并不会有太大问题,反而这样清晰的解构更方便后期的维护和操作。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
个人建议第一种方案
explode
的方式不仅在php
层多做了一次处理,并且在mysql
中看起来不直观,我想看某个职位有哪些属性,还得去另一个表去看id
对应哪个属性