代码之家  ›  专栏  ›  技术社区  ›  Peter Bailey

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

  •  1
  • Peter Bailey  · 技术社区  · 16 年前

    我遇到了一些让我很困扰的事情,我想来这里向你们(和女孩们)寻求一种“最佳实践”类型的建议

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

    关键在于- ext_status_2_id 为NULL,除非 ext_status_1_id 1 (这就是业务规则的工作原理)。

    我建模正确吗?我脑子里有个唠叨的声音告诉我,“不是每一排都需要 所以这可能是不对的”。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Keith Adler    16 年前

    既然Status2对Status1有一个内置的依赖关系,为什么不在潜在客户表上只有一个状态字段,并在Status1表上将Status2创建为属性呢?它当然以这种方式进行了大量规范化,但以这种方式具有数据结构说明了Status2对Status1的依赖性。

        2
  •  1
  •   Evert    16 年前

    这可能没问题。但由于你总是只使用2个中的1个,你可以将其建模为:

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

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

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

        3
  •  0
  •   Shai    13 年前

    有什么可能 ext__status__1 ?威尔 ext__status__2 只有在以下情况下才有值 status__1=1 ?什么是 status__1=2 ?我部分同意日产范的观点。然而,两者之间是否存在直接的依赖关系 status__1 Status__2 ?表单是否存在功能依赖关系 status__1 -> Status__2 ?
    如果没有这种依赖性,那么保持 状态_1 状态__2 单独的表格并不能解决你的问题。