在以下数据库布局中:
我想确保学生只参加同一科目的一门课程。
我不想确保100%的一致性,我担心并发问题。
这意味着我可以使用表/行锁定解决方案,并且不需要模拟唯一键约束的触发器。
当然我可以将subject_id添加到关系中并创建一个唯一的键,但是我会将它冗余地存储在我不想要的地方。
答案 0 :(得分:0)
我不知道我的问题是否正确,但如果我这样做,这就是我的答案:
从id
移除student_course_relation
列,并将primary key
放在id_student
和id_course
上。
这样,只有这些组合需要是唯一的。
答案 1 :(得分:0)
经过一些研究后,我发现我的问题的一个有希望的解决方案是在MySql中使用GET_LOCK()
函数
http://dev.mysql.com/doc/refman/4.1/en/miscellaneous-functions.html#function_get-lock
要获取连接中学生ID特定名称的锁定,然后选择课程,执行插入操作。 第二个连接必须等待同一个锁,然后选择课程ID将返回id。