我和this old post有同样的问题.
但在我的例子中,我没有表格,我只有两个列。我解释:
***mytable
id
name
conditional_1 (is a foreign key int)
conditional_2 (int)
包含的数据是这样的:
id name conditional_1 conditional_2
1 oscar 1 NULL
2 rene NULL 67
3 hello 2 NULL
4 stack 4 NULL
5 overf NULL 98
我做的对吗?或者我需要如下内容:
***mytable
id
name
cond_type
conditional_id (fk tbl_post)
***condtable1
conditional_1
***condtable1
conditional_2
这种情况的最佳解决方案是什么?
最佳答案
通过在同一个表中使用列,您可以强制执行排他性和引用完整性。换句话说,您可以确保在给定的行中,至多有一个字段是非 NULL1 并且 引用正确表中的现有行。或者,您可以考虑继承。有关两者的更多信息,请查看 this post .
cond_type
之类的东西从 DBMS 的角度来看没有任何意义 - 您将放弃参照完整性的自动实现。在并发环境中手动执行此操作可能不正确或很慢。2
1 不幸的是,MySQL 不强制执行 CHECK 约束(这将是强制排他性的自然机制),但您仍然可以依赖触发器。
2 您需要非常小心地锁定以避免竞争条件,即使您做得对,您也可能会损害过程中的可伸缩性。
关于mysql - 如何管理MySQL数据库中的条件列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884059/