代码之家  ›  专栏  ›  技术社区  ›  Alexander Pogrebnyak

标记列还是外键?

  •  0
  • Alexander Pogrebnyak  · 技术社区  · 16 年前

    +---------------------------------------+
    | ENTERPRISES                           |
    +----+--------------+-------------------+
    | ID | Name         | Primary Domain ID |
    +----+--------------+-------------------+
    | 1  | Enterprise A | 2                 |
    | 2  | Enterprise B | 4                 |
    +----+--------------+-------------------+
    
    +---------------------------------------+
    | DOMAINS                               |
    +----+------------------+---------------+
    | ID | Domain Name      | Enterprise ID |
    +----+------------------+---------------+
    | 1  | ent-a.com        | 1             |
    | 2  | enterprise-a.com | 1             |
    | 3  | ent-b.com        | 2             |
    | 4  | enterprise-b.com | 2             |
    +----+------------------+---------------+
    

    +-------------------+
    | ENTERPRISES       |
    +----+--------------+
    | ID | Name         |
    +----+--------------+
    | 1  | Enterprise A |
    | 2  | Enterprise B |
    +----+--------------+
    
    +----------------------------------------------------+
    | DOMAINS                                            |
    +----+------------------+---------------+------------+
    | ID | Domain Name      | Enterprise ID | Is Primary |
    +----+------------------+---------------+------------+
    | 1  | ent-a.com        | 1             | False      |
    | 2  | enterprise-a.com | 1             | True       |
    | 3  | ent-b.com        | 2             | False      |
    | 4  | enterprise-b.com | 2             | True       |
    +----+------------------+---------------+------------+
    

    我的问题是,哪一个更有效/正确?

    另外,在第一个示例中,我应该为主域列使用ID还是使用字符串值,这样ENTERPRISES表就不会对DOMAINS表有循环依赖关系?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Seb    16 年前

    两者都是 对的

    你建议的那个数据较少 ,而在第二个示例中,您可能有100个属于同一公司的域,所有域都具有 IsPrimary 着手 False 只有一个域设置为 True .

    在第一个场景中只强制一个主域更容易 ,而在第二个域中,您必须在代码中编写触发器或检查,以确保始终只有一个主域。

        2
  •  1
  •   Adam Robinson    16 年前

    参考资料 你没事。圆形 不是。只要 Primary Domain ID Domain 没有 Enterprise ,但也无法创建 企业 没有 主域ID .

    我会选择前者(您提出的解决方案) Enterprise->Domain 这种关系是一对多的关系 Enterprise->Primary Domain

        3
  •  1
  •   JoshBerke    16 年前

    在第一个模型中,您说企业应该有一个主域。扩展一下,说它将有一个主域。此时,您将倾向于将该列标记为不可为空。

    问题是,由于创建了循环依赖,因此无法插入数据。您不能插入没有域的企业,也不能插入没有企业的域。

    我更喜欢第一个模型,因为它更清晰、更明确。您的模型强制执行一个主域,其中第二个模型中没有任何内容,因此您将被迫使用其他机制强制执行此规则。

    推荐文章