mysql - 如何从一列引用不同的表?

标签 mysql database-design

我有以下数据库设计(只保留基本信息):

 TABLE monument
     PRIMARY KEY id
     name

 TABLE restorer
      PRIMARY KEY id 
      name

 TABLE project
      PRIMARY KEY id
      name

 TABLE restorer2project
     FOREIGN KEY restorer_id REFERENCES restorer(id),
     FOREIGN KEY project_id REFERENCES project(id)
     PRIMARY KEY (restorer_id, restoration_project_id)

 TABLE monument2project
     FOREIGN KEY monument_id  REFERENCES monument(id)
     FOREIGN KEY project_id REFERENCES project(id)
     PRIMARY KEY (monument_id, project_id)

项目可以有很多修复者和很多纪念碑。项目也可以在未来以相同的关系重复,但日期不同。 我想创建表女巫来存储图片。

 TABLE picture
      PRIMARY KEY id
      reference_to_different_tables 

是否可以从一列指向不同的表? 如果是怎么办? 这是好的设计吗(对我来说很自然,我可以想象用图片创建更多表格)

其他方法是引用其他表中的图片,但我需要某种映射表,但不确定它是否也是好的设计。

最佳答案

从数据库的角度来看,你不能有一个外部引用不同的表。 它一次可以引用一个表。 我可以想到三种解决方案:

  1. 在我看来,最好的解决方案是让父表对 monumentrestorerprojectartifact >。后面的三个表将以 artifact 表中的主键作为外键。这样你就可以在图片表中有一个单列,它将引用 artifact 表。
  2. 或者您可以按照@CptMisery 在评论中的建议在picture 表中指定多个列。
  3. 为所有这些创建多个图片表。这不是好的解决方案。

如果您正在使用任何持久性框架,那么第一个解决方案也可以解决动态查询问题。

关于mysql - 如何从一列引用不同的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551851/

相关文章:

mysql - 使用游标将包含特殊字符的url保存到mysql数据库中

javascript - 根据下拉菜单中的项目选择在文本框中显示价格

sql-server - 将所有非聚集索引移动到 SQL Server 中的另一个文件组

database - 包含问题和答案的数据库结构

database - 如何在数据库中表示二维数据矩阵

database - 用户表的最佳数据库设计(模型)

javascript - CakePHP如何生成其外部密码

mysql - 我可以像在 hive 中那样更改所选数据库的 mysql 提示符吗?

MYSQL 选择值表结构

database-design - 使用自然键,或使用代理键和审计表来审计/更改日志