我遇到的问题与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
这种情况的最佳解决方案是什么?
答案 0 :(得分:1)
通过在同一个表中使用列,您可以强制执行排他性和参照完整性。换句话说,您可以确保在给定行中最多一个字段是非NULL 1 并且引用正确表中的现有行。或者,您可以考虑继承。有关两者的更多信息,请查看this post。
像cond_type
这样的东西从DBMS的角度来看没有任何意义 - 你将放弃参照完整性的自动执行。在并发环境中手动执行此操作可能不正确或缓慢。 2
1 不幸的是,MySQL不强制执行CHECK约束(这将是强制执行排他性的一种自然机制),但你仍然可以依赖触发器。
2 你需要非常小心地锁定以避免竞争条件,即使你做得正确,也可能会损害过程中的可扩展性。 < / p>