日期:2014-05-16  浏览次数:20422 次

数据库的设计原则:关联还是不关联?
数据库的设计原则:关联还是不关联?

设计网站数据库(确定使用Hibernate)的过程中,时常会有争论,争论的焦点主要还是集中在表与表之间的关联上面:
有的倾向于去掉表与表之间的任何关联;有的拿完整性说话,必须保留所有的关联性。


先说我的观点:我倾向于去掉所有的关联,为了开发的方便。然后写代码的时候自己留意完整性的问题。
45 楼 murainwood 2009-10-20  
Hibernate 自动生成的 SQL,只能算是合格。SQL毕竟是和数据库相关的。有时候一句SQL,得去想想数据库里到底发生了什么
46 楼 putonyuer 2009-10-20  
xinshaoye 写道
网站数据库设计 多采用反范式设计
除了开发的方便 也还考虑到访问量问题 个人倾向于少关联




是啊 , 这个主要看什么系统, 如果是给党国的办公系统, 根本不用考虑这些。

如果是实用性的  ,  关键表 确实得冗余少关联。
47 楼 ycysth 2009-11-04  
作为一个初学者,现在确实感觉不到关联的好处,而且感觉很麻烦
48 楼 ngr1984 2009-11-04  
工作时间不长,个人感觉关联对于开发人员来讲是一个很麻烦的问题,一般不考虑关联.
49 楼 clockmaker 2009-11-04  
qaz1234 写道
hibernate能做的,而且做的还挺好的.
想不出非要自己重复制造轮子的理由.
我相信多数情况下,我们程序员的代码并不比hibernate更好.
除非你的某个设计目的就是朝着它的死穴去的.

奇怪的论调,别人造的轮子不转,难道自己还得等人家造会转的轮子?
50 楼 clockmaker 2009-11-04  
fangzhouxing 写道
【我们项目的关联(一般来说就是FK)都是在应用级别做逻辑关联的,在数据库级别没有做】

严重同意这种做法,hibernate的关联写法和用法是编程中的难点。

那就自己写SQL,用JDBC来实现吧。
51 楼 grandboy 2009-11-04  
我设计的数据库的时候,画ER图还是要加上外键等,看着舒服,然后在前期开发时候可能把关联去掉,功能开发到中后期,我一般都会把关联加上,并且保持和上线时候一致。因为数据库完整性的测试也应该是测试的一个重要部分,如果没有关联,这部分怎么保证? 可能在功能测试方面很难注意到方方面面的事。前面有人讲关联会影响性能,这个我倒是没有想过。不知道谁能给出具体的测试数据?
52 楼 zzhonghe 2009-11-07  
毫无疑问,数据库建了关联,保持数据的完整性,这是非常必要的。

至于说会导致性能问题,那完全是使用Hibernate不够优化而导致的。POJO中建多了一对多,多对对的关联关系,你看看Hibernate执行的SQL就能知道,JOIN了那么多的表,不慢才怪。

我的倾向是对于小数据字典表的操作用程序自动关联,业务逻辑表的关联,尽量手工去做。如果性能还是有问题,那就再减少程序关联。
53 楼 helian 2009-11-08  
遗留系统,关联不关联你说了不算。
新系统,用hibernate的话先考虑表的问题岂不是跑偏了
54 楼 bluemaple 2009-11-08  
bluemeteor 写道
关系数据库..不关联为什么用关系数据库?

你应该慎重抉择hibernate中的one-to-many和many-to-many的使用,但是库表上的关系必须要声明

实际上这我觉得还得看实际的系统,关系数据库就不一定非得用到关系,你可以以代码的方式去处理。数据量一但上去之后用join去查询你会觉得很痛苦
55 楼 carlkkx 2009-11-08  
很多人都强调数据完整性,但是现实世界是数据往往要容错的,而且完整性并不是要同一时间保证的,比如你填一份表格,有几个栏位不确定,但是已经填的需要放入,没填的等明确了再填,但是数据库约束却认为这份数据是不合法的,无法加入,岂不是很不好的体验。数据完整性现实世界操作往往不是同一时间完成的,但是电脑却蛮横无理要求一定要满足了才能放入,是很糟糕的体验。
56 楼 vager 2009-11-08  
都不关联了,还用hibernate吗?
57 楼 jcs7575 2009-11-08  
能保证数据完整性即可 连不连都行
58 楼 JackAndroid 2009-11-09  
   一般而言,数据库关联不关联也取决于具体的项目,如果来来回回就那么几张表,那关联也无所谓;如果是大型ERP系统,需要1W以上的表单的话,那是不能关联的,因为即使关联也无人知道ER图之类的。