Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 外键约束与1对n和n对1的单独表(关系数据库)_Performance_Hibernate_Relational Database_Foreign Key Relationship_Relational Algebra - Fatal编程技术网

Performance 外键约束与1对n和n对1的单独表(关系数据库)

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) 从性能的角度来看,这不是很幸运,需要额外的表(更多内存)和更多的连接,这可能会对性能产生负面影响。当

这里有一个设计问题。我很感兴趣,因为这会对性能产生影响,但是,当涉及到可理解性或语义时,我们会有影响吗

我见过很多人——特别是在企业环境中——让Hibernate生成单独的表,而不是创建外键约束

特别是,如果您有表A和表B,并且这种关系是1对多的,那么人们倾向于让Hibernate生成表A_B,其中包含A和B的主键,并且显示了1对多的关系。更具体地说,它们将外键约束提取到一个新的单独的表中

1) 从性能的角度来看,这不是很幸运,需要额外的表(更多内存)和更多的连接,这可能会对性能产生负面影响。当然,这取决于底层实现,因为通过缓存和智能游标管理,这一点可以得到缓解

2) 语义和/或可理解性是否受到影响?如果是这样的话,那么从不查看生成代码的规则呢?(代码生成的拥护者将断然拒绝)。这仅适用于从模型生成表的情况(如Hibernate允许您这样做)

3) 标准表格不受这种表格设计方式的影响,但是,当您试图强制使用更高的标准表格时,它确实会导致“表格爆炸”

我真的不明白这个“最佳实践”(如果它是一个)是否有隐藏的意义,或者它只是配置Hibernate时的一个错误/缺乏理解;-)

欢迎任何意见


编辑:表/关系不是n对m(多对多)。另外,您可以让Hibernate生成一个关系,而不是外键约束,我的问题是(上面的问题)为什么要这样做

如果您有一个映射表(
a_B
,在您的示例中),它更可能是一个多对多关系,而不是一对多关系。我仔细检查了一下,它们都是1对多和多对1。这实际上是问题的一部分,为什么人们会这样做?我想说的是,在这种情况下,您的Hibernate映射可能有问题(尽管我不知道Hibernate)。为什么不将映射添加到问题中。如问题中所述,您可以选择(精确地标记一个复选框)是否生成关系。问题仍然是,为什么Hibernate的开发人员会想到这种情况?为什么有些人会选择这个选项,对我来说,看起来很没用。确切地说,我感兴趣的是听一个有效的用例和做出这样决定的理由。我不知道Hibernate,但这可能只是Hibernate在外键上创建非聚集索引的(替代)方法吗?