代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

如何在RDBMS中表示对象分类层次结构

  •  1
  • Itay Moav -Malimovka  · 技术社区  · 15 年前

    我的数据, 如果 它将由对象表示,看起来像:

    abstract class A{
       int a;
       int b;
       string c;
    }
    
    class B inherits A{
      string D;
    }
    
    class C inherits A{
      int e;
      int f;
    }
    

    我的问题是:是否为实体B和C创建单独的表? 或者我创建一个主表,对于每种实体类型,我做不同的连接来获取数据。
    在现实世界中,对于所有实体,我将拥有大约15个类似的字段,对于每个实体,大约有1-3个唯一的字段。
    我预计最多10万条记录。

    有什么见解吗?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Adam Robinson    15 年前

    在这个问题上,你会发现不少意见。许多人主张 concrete table inheritance ,其中(如第一个选项中所述)显式定义每个表中的数据。

    如果你第二次陈述,我会的 推荐这种模式。我同意这样的想法:有一个“主”表表示父表,还有一个辅助表表示子表。您可能希望在主表中包含某种类型的类型标识符,以便指示它是哪种类型的实体,但这可能是必要的,也可能不是必需的。至少,你需要…

    tableA
    (
        ID (primary),
        A,
        B,
        C
    )
    
    tableB
    (
        ID (primary and foreign->table_A),
        D
    )
    
    tableC
    (
        ID (primary and foreign->table_A),
        E,
        F
    )
    
        2
  •  3
  •   KM.    15 年前

    表A包含所有类似字段,表B和表C包含唯一字段

    table_A
       PKa
       a int
       b int
       c string
    
    
    table_B
      PKb
      FKa
      D string
    
    
    table_C
      PKc
      FKa
      e int
      f int