如何在几个表上设置一个FK(外键)?

时间:2015-09-20 09:25:56

标签: php mysql database

我有几个Posts表和一个Votes表。如何防止在post_id表中插入不存在的Posts(在Votes表中)?

// Posts_1                  // Posts_2                  // Posts_3
+----+---------+            +----+---------+            +----+---------+
| id | content |            | id | content |            | id | content |
+----+---------+            +----+---------+            +----+---------+

// Votes
+----+---------+
| id | post_id |
+----+---------+

应该注意,实际上Posts表的结构是不同的。 (所有Posts表都没有相同的结构),然后我不能将所有Posts表组合为一个表。

现在我想防止在Votes表中插入无效行。 (无post_id个表中没有{invalid = Posts

所以,如果我只有一个表,我可以在对Votes.post_id的{​​{1}}引用上创建一个外键,但问题是有几个Posts.id表。好的,好吧,有什么建议吗?

2 个答案:

答案 0 :(得分:2)

表结构很疯狂。您需要有一个POST索引表,它将所有帖子组合到一个单独的位置,并给出如下:

// Posts_Index
+----+---------+------------+
| id | post_id | post_table |
+----+---------+------------+

// Votes
+----+---------+
| id | post_id |
+----+---------+

否则你需要反向映射方式。那样,post_id -> votes.id

答案 1 :(得分:0)

解决方案可能是您在投票表中使用post_table_ref来确定投票的投票位置。必须为整个应用程序修复此post_table_ref

根据发布帖子的表格,您必须在投票更新查询中提供post_table_ref

例如:如果帖子来自post_table_01,您必须在投票更新查询中将post_table_ref设置为1。在从投票表中获取记录时,您将在post_table_ref查询的WHERE子句中使用相同的SELECT FROM VOTES