V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ca1123
V2EX  ›  数据库

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

  •  
  •   ca1123 · 2022-07-14 19:09:58 +08:00 · 1203 次点击
    这是一个创建于 900 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    13 条回复    2022-07-15 11:11:08 +08:00
    mm163
        1
    mm163  
       2022-07-14 19:23:05 +08:00
    只要能方便判断引用哪个表,就没必要改吧。
    外键限制更没必要。
    golangLover
        2
    golangLover  
       2022-07-14 19:29:30 +08:00 via Android
    hibernate 继承映射
    ca1123
        3
    ca1123  
    OP
       2022-07-14 20:12:08 +08:00
    @golangLover 相当于给多个表做了一个父类?
    ca1123
        4
    ca1123  
    OP
       2022-07-14 20:12:52 +08:00
    @mm163 交给程序判断也可以, 反正 SQL 引擎自己也是图灵机
    golangLover
        5
    golangLover  
       2022-07-14 22:50:29 +08:00
    @ca1123 对的。好像其中一种还能自动把内容保存在同一个表之中,应该就是你想要的那种情况。
    但是我上一次尝试的时候没有成功,但没有时间慢慢去试了,所以就放下了。如果你试验成功,请分享一下。谢谢。
    ca1123
        6
    ca1123  
    OP
       2022-07-15 02:03:31 +08:00
    @golangLover 面相对象的范式本身就挺关系型的, 这个同构是怎么来的... 我其实不太懂 hibernate... 我写 clojure 的. 我最后选择直接把父类记成 entity 了, 把几个表合并了.
    golangLover
        7
    golangLover  
       2022-07-15 09:15:56 +08:00 via Android
    @ca1123 其实就是用一个表来储存,然后用 type 字段来区分指向不同的表。里面可能有个 ref id ,用 type 和 ref id 来找到实际的关联的表和行。hibernate 继承映射可以自动处理这东西,映射出来的几个 dao 看起来属于不同表,但他会自动处理
    bthulu
        8
    bthulu  
       2022-07-15 09:42:49 +08:00
    efcore 可以自动处理这些事情的, 不用你操心
    ca1123
        9
    ca1123  
    OP
       2022-07-15 10:14:26 +08:00
    @golangLover 啊哈, 和我手工的做法差不多, 我也是用了 type, 看来我虽然笨, 但是没弄错.
    ca1123
        10
    ca1123  
    OP
       2022-07-15 10:14:53 +08:00
    @bthulu 哭唧唧, 我是野生的, 我不知道 efcore 是啥...
    ca1123
        11
    ca1123  
    OP
       2022-07-15 10:15:35 +08:00
    @bthulu 我猜, 是一种泛化 schema 的东西么?
    bthulu
        12
    bthulu  
       2022-07-15 10:27:29 +08:00
    ca1123
        13
    ca1123  
    OP
       2022-07-15 11:11:08 +08:00
    @bthulu 也合理, 面向对象就很关系型
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1593 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:41 · PVG 00:41 · LAX 08:41 · JFK 11:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.