我有一张名为“评论”的表格。我希望该表能够与数据库中的任何其他表相关联。例如,假设我有“用户”、“项目”和“任务”表。我希望能够将评论与任何这些表中的任何行相关联。
我当前的解决方案是一个名为“comments_relations”的表,它有 4 列:“id”、“comment_id”、“foreign_table”和“foreign_table_id”。这很好用,但有一个严重的问题:“comments”表实际上与任何其他表都不相关,所以我没有得到外键的任何优点。删除项目时,我希望也删除所有相关评论,用户和任务以及我添加的任何未来表也是如此。
根据我的经验,我只能描绘出两个真正的解决方案(在我看来,两者都很糟糕):
- 为每个相关表的“comments”表添加一个可为空的列,例如“user_id”、“project_id”和“task_id”。我可以在所有这些列上定义一个外键并获得我想要的行为。但是,当我有 10 个需要评论的表的那一天呢?然后是20?我不认为这是一个非常可扩展的解决方案。
- 为每个相关表添加另一个表,例如将每个表链接到评论表的“users_comments”、“projects_comments”等。这使“评论”表保持干净,但同样,这将使我的数据库中的表数量几乎翻倍。如果我添加另一个应该与其他表相关的表怎么办?这不成比例。
一个理想的解决方案是我目前正在使用的解决方案,但不知何故增强了我的外键功能。
总结的问题:
定义可以与任何数量的其他表相关的表的最具可扩展性的方法是什么?