我遇到了一些让我烦恼的事情,我想来这里寻找一种“最佳实践”类型的建议来自你们(等等)
我的模型中有一张表,我们称之为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_id
为1
(这正是业务规则的工作原理)。
我是否正确建模了?我只是在我的大脑背后发出这种唠叨的声音,告诉我“并非前景中的每一行都需要一个ext_status_2_id
,所以这可能不对。”
如果重要,这是MySQL 5.0.45,我正在使用InnoDB
答案 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__1
和Status__2
之间的直接依赖关系? status__1 -> Status__2
形式是否存在功能依赖?
如果没有这种依赖性,那么将status__1
和Status__2
保留在一个单独的表中并不能解决您的问题。