Performance 外键约束与1对n和n对1的单独表(关系数据库)
这里有一个设计问题。我很感兴趣,因为这会对性能产生影响,但是,当涉及到可理解性或语义时,我们会有影响吗 我见过很多人——特别是在企业环境中——让Hibernate生成单独的表,而不是创建外键约束 特别是,如果您有表A和表B,并且这种关系是1对多的,那么人们倾向于让Hibernate生成表A_B,其中包含A和B的主键,并且显示了1对多的关系。更具体地说,它们将外键约束提取到一个新的单独的表中 1) 从性能的角度来看,这不是很幸运,需要额外的表(更多内存)和更多的连接,这可能会对性能产生负面影响。当然,这取决于底层实现,因为通过缓存和智能游标管理,这一点可以得到缓解 2) 语义和/或可理解性是否受到影响?如果是这样的话,那么从不查看生成代码的规则呢?(代码生成的拥护者将断然拒绝)。这仅适用于从模型生成表的情况(如Hibernate允许您这样做) 3) 标准表格不受这种表格设计方式的影响,但是,当您试图强制使用更高的标准表格时,它确实会导致“表格爆炸” 我真的不明白这个“最佳实践”(如果它是一个)是否有隐藏的意义,或者它只是配置Hibernate时的一个错误/缺乏理解;-) 欢迎任何意见Performance 外键约束与1对n和n对1的单独表(关系数据库),performance,hibernate,relational-database,foreign-key-relationship,relational-algebra,Performance,Hibernate,Relational Database,Foreign Key Relationship,Relational Algebra,这里有一个设计问题。我很感兴趣,因为这会对性能产生影响,但是,当涉及到可理解性或语义时,我们会有影响吗 我见过很多人——特别是在企业环境中——让Hibernate生成单独的表,而不是创建外键约束 特别是,如果您有表A和表B,并且这种关系是1对多的,那么人们倾向于让Hibernate生成表A_B,其中包含A和B的主键,并且显示了1对多的关系。更具体地说,它们将外键约束提取到一个新的单独的表中 1) 从性能的角度来看,这不是很幸运,需要额外的表(更多内存)和更多的连接,这可能会对性能产生负面影响。当
编辑:表/关系不是n对m(多对多)。另外,您可以让Hibernate生成一个关系,而不是外键约束,我的问题是(上面的问题)为什么要这样做 如果您有一个映射表(
a_B
,在您的示例中),它更可能是一个多对多关系,而不是一对多关系。我仔细检查了一下,它们都是1对多和多对1。这实际上是问题的一部分,为什么人们会这样做?我想说的是,在这种情况下,您的Hibernate映射可能有问题(尽管我不知道Hibernate)。为什么不将映射添加到问题中。如问题中所述,您可以选择(精确地标记一个复选框)是否生成关系。问题仍然是,为什么Hibernate的开发人员会想到这种情况?为什么有些人会选择这个选项,对我来说,看起来很没用。确切地说,我感兴趣的是听一个有效的用例和做出这样决定的理由。我不知道Hibernate,但这可能只是Hibernate在外键上创建非聚集索引的(替代)方法吗?