数据库中没有外键约束。!

时间:2013-03-27 06:50:20

标签: mysql sql relational-database hibernate-mapping

我的组织使用Hibernate处理Spring MVC。我们总是在映射文件中指定外键约束,例如Person.hbm.xml

中的person和contactList
<set name="ContactList">
  <key column="PersonId" foreign-key="Fk_Peson_Contact"/>
  <one-to-many class="Sample.Model.Contact"/>
</set>

此映射将在PersonContact之间创建一对多关系,并将PersonID保留为Contact表中的外键列。

但是,现在组织决定不提及映射文件中的任何关系,意味着上述情况Person映射不会有任何类型的一对多映射而不是Contact映射将具有属性<property name="FK_PersonID"/>,该属性将创建保留personID的列。在此方案中,表PersonContact看起来相同,但不同之处在于它们与PersonContact之间没有关系,因为没有指定映射。

在这种情况下,如果我们想要获取人的联系人列表,那么我们必须触发两个查询,以获取另一个人的联系人列表。假设我们想要使用其contactList获取personList,然后我们必须在PersonList上For loop并获取它将触发查询数量的ContactList。

当我问为什么不指定关系时,大四说,

  • 如果外键在DB中,那么我们就不能进行切片和分区。

  • 当我们触发连接查询时,DB需要更多时间来执行它。这可能会减慢数据库服务器的速度。

但是,我的问题是 -

  • 如果我在personList上执行For looping那么它会触发查询次数以获取联系人吗?

  • 这样的循环可以减慢应用程序或应用程序服务器的速度吗?

  • 如果我想用conatctList,AddressList,QualificationList获取personList,会导致n + 1问题吗?

无论是否指定映射,哪种方案更有用。

1 个答案:

答案 0 :(得分:0)

好吧,我是微软公司(MS)SQL分区的早期演示之一,他们展示了一个从分区表中选择的查询,其中数据填充了多个部分,并且它使用其索引和统计信息甚至不打扰访问分区没有(相关)数据。当然如果你没有fk constaint那么它就不能使用索引和统计来知道fk conforms。我很确定Kalen Delaney会在她的书中介绍它(对于MSSQL的相关版本)。关键是统计数据将包含必要的信息以防止不必要的搜查。该演示实际上使用了一个联合来轻松演示效果。

相关问题