在关系数据库中链接未知表的外键

Posted

技术标签:

【中文标题】在关系数据库中链接未知表的外键【英文标题】:linking foreign Key of unknown table in a relational database 【发布时间】:2017-03-10 12:40:06 【问题描述】:

我目前正在尝试建立一个关系数据库 (H2),它将 JAVA 模型的面向对象结构投影到我的数据库的关系表中。我正在使用 JDBC 和 H2 RDBMS。

所以这是我的问题: 我有一个“属性”类型的对象,它应该存储在“属性”表中。此属性的所有者可以是“功能”类型的对象,也可以是“块”类型的对象,它们都有自己的表。一个属性对象只能由一个对象(函数或块)拥有,使其成为 1:n 基数。

然而,我正在努力解决如何将所有者包含在属性表中。如果我创建一个名为“ownerID”的表并在其中存储所有者的 ID(顺便说一句,全局唯一 ID),则数据库缺少有关哪个表包含此 ID 的信息(即使它是 GUID)。

-例如,是否可以包含另一个包含 owner_ID 所属表的名称的列?

-另一个想法是包含一个“functionOwnerID”列和一个“blockOwnerID”,并将其中一个留空,但这对我来说似乎是一个相当肮脏的解决方案。

我希望我对问题的描述很清楚,在此先感谢!

最好的问候, 莫里茨

【问题讨论】:

【参考方案1】:

“例如,可以包含另一个包含 owner_ID 所属表的名称的列吗?”

这就是多态关系的工作原理! :)

编辑:(是的,你可以这样做,这实际上很常见)


参考文献:

(Rails/ActiveRecord 文档):http://guides.rubyonrails.org/association_basics.html#polymorphic-associations (Laravel/Eloquent 文档):https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations

【讨论】:

以上是关于在关系数据库中链接未知表的外键的主要内容,如果未能解决你的问题,请参考以下文章

在 ms-access 中获取表的外键约束列表?

数据库中的外键

为啥我需要将子表的主键作为父表的外键,而不是相反的 1:1 识别关系?

使用两个表的主键的外键关系

MySQL:数据管理

Laravel Eloquent 关系 - 表的多列引用相同的外键