2

我和这个旧帖子有同样的问题。

但就我而言,我没有表格,我只有两个列。我解释:

***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

这种情况下的最佳解决方案是什么?

4

1 回答 1

1

通过在同一个表中使用列,您可以强制执行排他性和参照完整性。换句话说,您可以确保在给定行中最多有一个字段为非 NULL 1 引用正确表中的现有行。或者,您可以考虑继承。有关两者的更多信息,请查看这篇文章

从 DBMS 的角度来看,类似的东西cond_type没有任何意义——您将放弃自动执行参照完整性。在并发环境中手动执行可能不正确或缓慢。2


1不幸的是,MySQL 不强制执行 CHECK 约束(这将是强制执行排他性的自然机制),但您仍然可以依赖触发器。

2你需要非常小心地锁定以避免竞争条件,即使你做对了,你也可能会损害过程中的可伸缩性。

于 2013-09-19T00:15:39.547 回答