数据建模 - 如何处理两个依赖的“状态”列?

时间:2009-07-20 18:19:40

标签: sql mysql data-modeling

我遇到了一些让我烦恼的事情,我想来这里寻找一种“最佳实践”类型的建议来自你们(等等)

我的模型中有一张表,我们称之为prospect。两个独立的外部系统可以为此表中的行提供更新,但仅作为相应系统中该记录的“状态”。

我需要在本地存储这些状态。最初的想法,当然,它只是制作两个可以为空的外键。这样的事情。

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| prospect_id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| ext_status_1_id | int(11)      | YES  |     | NULL    |                |
| ext_status_2_id | int(11)      | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

在这个例子中,当然会有两个表保存状态的id / value对。

以下是捕获 - ext_status_2_id总是为NULL,除非ext_status_1_id1(这正是业务规则的工作原理)。

我是否正确建模了?我只是在我的大脑背后发出这种唠叨的声音,告诉我“并非前景中的每一行都需要一个ext_status_2_id,所以这可能不对。”

如果重要,这是MySQL 5.0.45,我正在使用InnoDB

3 个答案:

答案 0 :(得分:4)

由于Status1上的Status2存在内置依赖关系,为什么不在Proster表上只有一个状态字段,并在Status1表上创建Status2作为属性?它肯定会以这种方式大量归一化,但以这种方式使用数据结构会说明Status2对Status1的依赖性。

答案 1 :(得分:1)

这可能很好。但是,由于你总是只使用2中的1个,你可以将它建模为:

ext_status_type(1或2)和ext_status表示实际的id。

我可能会像你一样做,因为围绕这个建立索引可能更容易,而且这两个数字似乎都有不同的含义。

如果有更多的状态(3,4,5,6),我会在我的回答中考虑第一种方法。

答案 2 :(得分:0)

可能的ext__status__1是什么?只有在ext__status__2时,status__1=1才会有值吗?什么是status__1=2?我同意日产范。是否存在status__1Status__2之间的直接依赖关系? status__1 -> Status__2形式是否存在功能依赖?
如果没有这种依赖性,那么将status__1Status__2保留在一个单独的表中并不能解决您的问题。