遇到一列引用多个可能表主键的情况怎么办?

2022-07-14 19:09:58 +08:00
 ca1123

关系型数据库, 遇到一列引用多个可能表主键的情况, 是拆分多列? 是合并可能得多个表? 怎么用上外键限制?

1022 次点击
所在节点    数据库
13 条回复
mm163
2022-07-14 19:23:05 +08:00
只要能方便判断引用哪个表,就没必要改吧。
外键限制更没必要。
golangLover
2022-07-14 19:29:30 +08:00
hibernate 继承映射
ca1123
2022-07-14 20:12:08 +08:00
@golangLover 相当于给多个表做了一个父类?
ca1123
2022-07-14 20:12:52 +08:00
@mm163 交给程序判断也可以, 反正 SQL 引擎自己也是图灵机
golangLover
2022-07-14 22:50:29 +08:00
@ca1123 对的。好像其中一种还能自动把内容保存在同一个表之中,应该就是你想要的那种情况。
但是我上一次尝试的时候没有成功,但没有时间慢慢去试了,所以就放下了。如果你试验成功,请分享一下。谢谢。
ca1123
2022-07-15 02:03:31 +08:00
@golangLover 面相对象的范式本身就挺关系型的, 这个同构是怎么来的... 我其实不太懂 hibernate... 我写 clojure 的. 我最后选择直接把父类记成 entity 了, 把几个表合并了.
golangLover
2022-07-15 09:15:56 +08:00
@ca1123 其实就是用一个表来储存,然后用 type 字段来区分指向不同的表。里面可能有个 ref id ,用 type 和 ref id 来找到实际的关联的表和行。hibernate 继承映射可以自动处理这东西,映射出来的几个 dao 看起来属于不同表,但他会自动处理
bthulu
2022-07-15 09:42:49 +08:00
efcore 可以自动处理这些事情的, 不用你操心
ca1123
2022-07-15 10:14:26 +08:00
@golangLover 啊哈, 和我手工的做法差不多, 我也是用了 type, 看来我虽然笨, 但是没弄错.
ca1123
2022-07-15 10:14:53 +08:00
@bthulu 哭唧唧, 我是野生的, 我不知道 efcore 是啥...
ca1123
2022-07-15 10:15:35 +08:00
@bthulu 我猜, 是一种泛化 schema 的东西么?
bthulu
2022-07-15 10:27:29 +08:00
ca1123
2022-07-15 11:11:08 +08:00
@bthulu 也合理, 面向对象就很关系型

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX