Java 在关系数据库中,是否应该;“父表”;参考a";“子表”;或者相反,这有关系吗?
我需要为我们的软件实现一些配置架构。 有一个Java 在关系数据库中,是否应该;“父表”;参考a";“子表”;或者相反,这有关系吗?,java,mysql,database,jpa,database-design,Java,Mysql,Database,Jpa,Database Design,我需要为我们的软件实现一些配置架构。 有一个Configuration表,有ConfigurationProductA和ConfigurationProductB扩展配置 通常,我选择在子项上添加外键,参考配置,但我的理由不是很好。这是因为我使用的是Hibernate/Jpa,可以(轻松)做到: 从父母那里引用孩子的优点和缺点是什么?最佳做法是什么?这取决于父母和孩子之间的关系类型: 假设一个子系统只有一个父系统,并且一个父系统可能有多个子系统,那么这就是一对多关系:您希望在子系统中存储父系统
Configuration
表,有ConfigurationProductA
和ConfigurationProductB
扩展配置
通常,我选择在子项上添加外键,参考配置
,但我的理由不是很好。这是因为我使用的是Hibernate/Jpa,可以(轻松)做到:
从父母那里引用孩子的优点和缺点是什么?最佳做法是什么?这取决于父母和孩子之间的关系类型:
- 假设一个子系统只有一个父系统,并且一个父系统可能有多个子系统,那么这就是一对多关系:您希望在子系统中存储父系统id
- 如果一个孩子可能有多个父母,而一个父母可能有多个孩子,那么这就是一种多对多关系。在这种情况下,规范方法是使用一个额外的实体,称为连接表(或桥接表)来存储父/子关系
@实体中
?取决于您希望如何查找子项。@Upsilon42:如果一个子项有多个父项,但每个父项只有一个子项。。。这似乎不是一个合理的“父/子”关系。定义“父”和“子”表。FK是一个列集,其值必须在其他位置显示为FK/UNIQUE。当它被声明&而不是被其他声明暗示时,就声明它。
@Entity
@Table(name="ConfigurationProductA")
@PrimaryKeyJoinColumn(name = "conf_id")
public class ConfiguratioProductA extends Configuration{/*...*/}