一列多个表外键..可能吗?

时间:2012-12-18 01:48:53

标签: innodb foreign-key-relationship

我有几个实体,可以有多种关系。

例如,我有以下权利:

  1. ENTITY_TYPE
  2. 标签
  3. tag_assignment
  4. news_post
  5. 帐户
  6. 在entity_type表中描述了我项目中的所有实体(例如新闻帖子,博客帖子,消息,帐户,所有内容) Entity_type表只有id和name字段,name字段描述了可用性的模型类名

    标签实体只有id和name。它是独立实体,稍后使用tag_assignment实体

    映射到其他实体

    标记赋值实体具有id,tag_id,entity_type_id和entity_id。 Entity_type_id描述了我可以在其中找到实体,entity_id指定表中的实体。

    所以我想将以下组合的foreig键从一列到多表:

    1. tag_assignment.entity_type_id => entity_type(id)
    2. tag_assignment.entity_id => news_post(id),account(id)等
    3. 是否可以制作这个组合键?我的意思是如果我从entity_type表中删除一行,如果我要删除/更新其他表中的一行,如果我要删除帐户,只会删除具有帐户外键的tag_assignments。

1 个答案:

答案 0 :(得分:1)

您应该通过提取名为entity的表来规范化您的数据库。该表的概念类似于OOP中的抽象类。您可能在数据库中拥有的news_postaccount和其他实体都应引用entity表。通过这种方式,您可以使用共同的特定位置引用您现在或将来可能拥有的任何实体。

enter image description here

此外,您可能希望熟悉EAV model。这可能有助于您解决类似的设计问题。