如何在MySQL数据库中管理条件列?

时间:2013-09-18 23:33:26

标签: mysql database database-design entity-relationship

我遇到的问题与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

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

1 个答案:

答案 0 :(得分:1)

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

cond_type这样的东西从DBMS的角度来看没有任何意义 - 你将放弃参照完整性的自动执行。在并发环境中手动执行此操作可能不正确或缓慢。 2


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

2 你需要非常小心地锁定以避免竞争条件,即使你做得正确,也可能会损害过程中的可扩展性。 < / p>