mysql - 链接表可以有两个互斥的列吗?

标签 mysql database-design foreign-keys constraints

我有一个问题,由于以前人们的糟糕设计决定,我不得不在链接表中有两列,这些列应该始终是互斥的。我见过SQL-Server: Define columns as mutually exclusive,但是MySQL不执行CHECK约束,所以我在寻找其他选项。有什么办法可以强制两列之间的互斥?

让我解释一下,以防有人看到更好的解决方案。

以前的开发人员/管理员已经构造了两个表,它们记录了基本上相同类型的事物。我有一个新的表,从理论上讲,它们都代表1->许多。因此,我的两个选择似乎是使用两个外部键引用创建两个桥接表或1个桥接表。这两个表对我来说似乎是一个丑陋的解决方案,我希望避免但不强制执行的互斥字段使我容易遭受腐败。

具体示例,因为我无法分享我的真实案例:

Table 'full_time_students' stores full time students
Table 'part_time_students' store part time students

Table 'class' will store class info
Table 'class_students' should store which students are in which class


在理想的世界中,我将两个学生表合并在一起,但是有很多代码会中断,而且我没有时间/意愿去解决所有这些问题,因此我不得不现在处理现有的模式/数据。我正在使用InnoDB,所以我已经在计划对student_id设置外键约束,但是就像我说的那样,如果我用一张表包含两列,则会使自己陷入同时拥有两个ID的行的弊端。

只需写出这个几乎可以说服我重新考虑2表解决方案...

最佳答案

这是在不破坏太多代码的情况下解决问题的一种思路。创建一个新表格的学生,并用其他表格中的数据和一个标记字段填充该字段以指示全职或兼职。然后创建具有全日制学生和兼职学生表名称的视图。这意味着所有选择仍将正常工作,而您要做的就是修复插入和更新代码以转到新表。

或者,您可以在触发器中执行规则。

关于mysql - 链接表可以有两个互斥的列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092239/

相关文章:

foreign-keys - Sequelize ,将列设置为来自另一个模式的表的外键

MySQL 和外键。在允许的 NULL 值列上不允许 NULL

mysql 缺少分号为什么?

php - Mysql存储过程创建出现2014错误

sql - 针对记录保存自定义属性值的最佳数据库设计

mysql - 跨多个数据库共享用户表以实现单次登录

sql - 如何在oracle中创建表作为选择(CTAS)?

mysql - 单表连续读写的Galera Active-Active有什么风险?

mysql - 在临时表上使用内联选择

database - Cassandra 中非均匀范围数据的均匀分区