Database design 是否有一个ORM支持不包含连接的合成

Database design 是否有一个ORM支持不包含连接的合成,database-design,orm,Database Design,Orm,编辑:将标题从“继承”更改为“合成”。问题的左半部未变 我很好奇是否有一个ORM工具支持继承,不创建必须连接的单独表 简单的例子。假设有一个客户表和一个帐单地址表,以及一个供应商表和一个汇款地址表。保持简单,假设每个地址一个,而不是每个地址的子表 这些地址有几个共同的值:地址1、地址2、城市、州/省、邮政编码。假设我有一个类“addressBlock”,我希望客户和供应商从这个类继承,也可能从其他类继承。但我不希望必须连接的单独表,我希望客户表和供应商表中的列分别存在 是否有支持此功能的ORM

编辑:将标题从“继承”更改为“合成”。问题的左半部未变

我很好奇是否有一个ORM工具支持继承,不创建必须连接的单独表

简单的例子。假设有一个客户表和一个帐单地址表,以及一个供应商表和一个汇款地址表。保持简单,假设每个地址一个,而不是每个地址的子表

这些地址有几个共同的值:地址1、地址2、城市、州/省、邮政编码。假设我有一个类“addressBlock”,我希望客户和供应商从这个类继承,也可能从其他类继承。但我不希望必须连接的单独表,我希望客户表和供应商表中的列分别存在

是否有支持此功能的ORM

下面是我在StackOverflow上发现的最接近的问题,可能是同一个问题,但我不太清楚OP是否在问我在问什么。他似乎正是因为将有多个表而询问上述继承。我正在寻找可以使用继承w/o生成多个表的情况

JPA(Java持久性API,由Hibernate、EclipseLink和其他人实现)支持这一点:您将定义一个地址POJO,将其标记为“可嵌入”,并有两个实体(客户和供应商),每个实体都有一个地址类型的字段(标记为“嵌入”)。客户地址的字段将映射到客户表中的列,供应商地址的字段将映射到供应商表中的列

注意,这里没有继承。继承适用于is-a关系。供应商不是地址,客户也不是地址。不过,这是一种组合,因为供应商有一个地址,而客户有一个地址。

JPA(Java持久化API,由Hibernate、EclipseLink和其他人实现)支持这一点:您将定义一个地址POJO,将其标记为“可嵌入”,并有两个实体(客户和供应商)每个字段都有一个地址类型的字段(标记为“嵌入”)。客户地址的字段将映射到客户表中的列,供应商地址的字段将映射到供应商表中的列


注意,这里没有继承。继承适用于is-a关系。供应商不是地址,客户也不是地址。不过,也有组合,因为供应商有一个地址,而客户有一个地址。

我的直接想法是,您使用的是继承,而您真正应该使用组合。当地址被规范化为一个单独的地址表时,您到底害怕什么,你为什么不想要呢。数据库的本质是许多小表,SQL是为连接而设计的。我的直接想法是,您使用的是继承,而您真正应该使用的是组合。由于地址被规范化为单独的地址表,您到底害怕什么,为什么不想要它呢。数据库的本质是许多小表,SQL是为连接而设计的。从您的回答中,我不清楚“嵌入地址”是包含列的集合还是只包含一列。换句话说,您是定义一个集合并将其嵌入一次,还是必须嵌入每个列?嵌入的地址包含您想要的任意多个字段,每个字段都映射到自己的列。地址本身包含字段到列的映射,但每次实际嵌入地址时,嵌入实体(例如客户或供应商)都可以自由自定义映射。例如,我不清楚你的答案是“嵌入地址”包含列集合还是只包含一列。换句话说,您是定义一个集合并将其嵌入一次,还是必须嵌入每个列?嵌入的地址包含您想要的任意多个字段,每个字段都映射到自己的列。地址本身包含字段到列的映射,但每次实际嵌入地址时,嵌入实体(例如客户或供应商)都可以自由自定义映射。请参阅以获取示例