有个多选匹配的数据库和程序设计问题
现在有这样一个需求,mysql数据库,比如说数据库中有科目表
tb_subject
id varcher(32)
name varcher(20)
教师表
tb_teacher
id varcher(32)
name varchar(20)
现在想在保存教师所带学科(可以带多个学科);
目前有以下3个方案:
1、教师表增加subject_ids 字段,用逗号分隔保存tb_subject表的id,查询时用findinset()函数查找。
2、建立教师、学科关联表
tb_teacher_subject
teacher_id varchar(32)
subject_id varcher(32)
3、教师表增加整型字段subjectsLong int
对tb_subject表中数据按照创建时间排序,为每个记录指定一个不变的序号,从0开始,记录只能新增,不能做物理删除,为的是保证之前的序列号不变。
选择多学科时,获取所选学科的序号列表,传入以下方法,计算出一个Long值,保存到subjectsLong字段
public static Long StringToLong(List<Integer> bitNumber) {Long tl = 0l;for (int ti : bitNumber) {tl = tl ^ ( 1l << (64 - ti - 1));}return tl;}