`
johnnyhg
  • 浏览: 348229 次
  • 来自: NA
社区版块
存档分类
最新评论

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

阅读更多
数据库的设计原则:关联还是不关联?

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


先说我的观点:我倾向于去掉所有的关联,为了开发的方便。然后写代码的时候自己留意完整性的问题。
分享到:
评论
64 楼 steeven 2009-12-15  
大家的case都不大一样, 结论自然不同.
偶是做c/s的, 数据要在远程传递, lazy的话序列化和jaxb都会有问题. 不lazy效率不高. 做b/s的可能没这个问题.
另外, 我觉得hibernate validation框架应该解决这个问题. 加上一个@FK属性就行了, 不要总干些拔出萝卜带出泥的事情.
另外, 强壮的系统似乎不应该依靠关联来检查错误, 就是报错信息也不好看.


查询效率问题, 冗余啊, 视图啊, 缓存啊都可以, 看数据量,效率了


偶准备做个POJO driven framework, 这个关联准备交给框架处理, 不要在数据库层面折腾.
63 楼 SoloT 2009-12-15  
iamlotus 写道
carlkkx 写道
很多人都强调数据完整性,但是现实世界是数据往往要容错的,而且完整性并不是要同一时间保证的,比如你填一份表格,有几个栏位不确定,但是已经填的需要放入,没填的等明确了再填,但是数据库约束却认为这份数据是不合法的,无法加入,岂不是很不好的体验。数据完整性现实世界操作往往不是同一时间完成的,但是电脑却蛮横无理要求一定要满足了才能放入,是很糟糕的体验。

这是最不负责任的作法。分析时不管业务意义上的约束,而是放开所有约束。等到生产环境出现了脏数据,一句“用户使用不规范”就给打发了。


你给党国的某些部门做事儿,约束性太强了,那些人还以为你的系统有问题呢
62 楼 iamlotus 2009-12-14  
carlkkx 写道
很多人都强调数据完整性,但是现实世界是数据往往要容错的,而且完整性并不是要同一时间保证的,比如你填一份表格,有几个栏位不确定,但是已经填的需要放入,没填的等明确了再填,但是数据库约束却认为这份数据是不合法的,无法加入,岂不是很不好的体验。数据完整性现实世界操作往往不是同一时间完成的,但是电脑却蛮横无理要求一定要满足了才能放入,是很糟糕的体验。

这是最不负责任的作法。分析时不管业务意义上的约束,而是放开所有约束。等到生产环境出现了脏数据,一句“用户使用不规范”就给打发了。
61 楼 daizz 2009-12-09  
开发经验丰不丰富也没啥关系吧
应用层逻辑不可靠,测试难道不能测出来么
ls有个哥们说得好,自己有把握就自己处理关联关系,没把握就用数据库
jasonshi 写道
除了极端性能要求的情况下,外键是不嫌多的。
大部分的应用,读多写少,外键的性能影响几乎可以忽略,只要索引合适就行。

通常软件开发经验越丰富,越是会知道关联/外键的好处。

应用层的校验不可靠的,外键就是为了防止应用层逻辑的不可靠。


60 楼 zhangzhongde 2009-12-07  
我建议您还是不要关联 自己用自己的业务逻辑比较好
59 楼 jasonshi 2009-11-09  
除了极端性能要求的情况下,外键是不嫌多的。
大部分的应用,读多写少,外键的性能影响几乎可以忽略,只要索引合适就行。

通常软件开发经验越丰富,越是会知道关联/外键的好处。

应用层的校验不可靠的,外键就是为了防止应用层逻辑的不可靠。

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

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

实际上这我觉得还得看实际的系统,关系数据库就不一定非得用到关系,你可以以代码的方式去处理。数据量一但上去之后用join去查询你会觉得很痛苦
53 楼 helian 2009-11-08  
遗留系统,关联不关联你说了不算。
新系统,用hibernate的话先考虑表的问题岂不是跑偏了
52 楼 zzhonghe 2009-11-07  
毫无疑问,数据库建了关联,保持数据的完整性,这是非常必要的。

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

我的倾向是对于小数据字典表的操作用程序自动关联,业务逻辑表的关联,尽量手工去做。如果性能还是有问题,那就再减少程序关联。
51 楼 grandboy 2009-11-04  
我设计的数据库的时候,画ER图还是要加上外键等,看着舒服,然后在前期开发时候可能把关联去掉,功能开发到中后期,我一般都会把关联加上,并且保持和上线时候一致。因为数据库完整性的测试也应该是测试的一个重要部分,如果没有关联,这部分怎么保证? 可能在功能测试方面很难注意到方方面面的事。前面有人讲关联会影响性能,这个我倒是没有想过。不知道谁能给出具体的测试数据?
50 楼 clockmaker 2009-11-04  
fangzhouxing 写道
【我们项目的关联(一般来说就是FK)都是在应用级别做逻辑关联的,在数据库级别没有做】

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

那就自己写SQL,用JDBC来实现吧。
49 楼 clockmaker 2009-11-04  
qaz1234 写道
hibernate能做的,而且做的还挺好的.
想不出非要自己重复制造轮子的理由.
我相信多数情况下,我们程序员的代码并不比hibernate更好.
除非你的某个设计目的就是朝着它的死穴去的.

奇怪的论调,别人造的轮子不转,难道自己还得等人家造会转的轮子?
48 楼 ngr1984 2009-11-04  
工作时间不长,个人感觉关联对于开发人员来讲是一个很麻烦的问题,一般不考虑关联.
47 楼 ycysth 2009-11-04  
作为一个初学者,现在确实感觉不到关联的好处,而且感觉很麻烦
46 楼 putonyuer 2009-10-20  
xinshaoye 写道
网站数据库设计 多采用反范式设计
除了开发的方便 也还考虑到访问量问题 个人倾向于少关联




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

如果是实用性的  ,  关键表 确实得冗余少关联。
45 楼 murainwood 2009-10-20  
Hibernate 自动生成的 SQL,只能算是合格。SQL毕竟是和数据库相关的。有时候一句SQL,得去想想数据库里到底发生了什么

相关推荐

    数据库课程设计:人事管理系统

    数据库课程设计是IT教育中的重要环节,通过实际操作和构建一个完整的人事管理系统,学生能够...通过这样的项目,学生不仅能熟悉SQL语言,还能深入了解数据库设计原则、事务处理、安全性控制以及性能优化等关键知识点。

    oracle数据库设计原则

    以下是一些核心的数据库设计原则和技巧,特别针对Oracle数据库: 1. **第三范式(3NF)**:3NF是数据库设计中常见的规范化程度,旨在减少数据冗余和提高数据一致性。它要求表中的每个非主键字段都完全依赖于主键,...

    数据库课程设计:家族族谱管理系统.zip

    数据库课程设计通常旨在让学生实践数据库的设计、开发与管理,通过实际项目来巩固理论知识。在这个“家族族谱管理系统”的案例中,我们可以探索多个关键的IT知识点。 首先,我们需要理解数据库的基本概念。数据库是...

    经典数据库设计14个原则

    ### 经典数据库设计14个原则 #### 1. 实体关系的一对一、一对多、多对多关系 - **定义与解释**:在数据库设计中,实体之间的关系通常分为一对一(1:1)、一对多(1:N)或多对多(N:M)。一对一指的是两个实体之间...

    数据库设计原则14法则

    以下是关于“数据库设计原则14法则”的详细解析: 1. 原始单据与实体之间的关系:数据库设计时,需要考虑原始数据源(如业务表格)与实体表之间的映射。通常,一张原始单据对应一个实体,但也有特殊情况,如一对一...

    数据库课设计:企业人事档案管理系统源码.zip

    总的来说,"数据库课设计:企业人事档案管理系统源码.zip"为学习者提供了一个宝贵的实践平台,通过深入研究源码,我们可以掌握数据库设计原则、Java编程技巧,以及软件开发的最佳实践,进一步提升我们的IT专业素养。

    数据库系统概论:第7章 数据库设计2.ppt

    【数据库设计概述】 数据库设计是构建数据库的关键步骤,它确保了数据库能够有效地存储、管理和检索数据。数据库设计包括多个阶段,旨在确保最终的数据库既满足用户需求,又能提供高效的性能。 1. **需求分析**:...

    数据库设计原则

    本文主要探讨了几个关键的数据库设计原则,包括各种范式标准、E-R图、三少原则以及提高数据库运行效率的方法。 首先,原始单据与实体之间的关系在数据库设计中起到基础作用。通常,原始单据可以一对一、一对多或多...

    DB2数据库设计和最高性能原则

    《DB2数据库设计和最高性能原则》是一篇旨在提供实用指导的文章,它不仅仅关注于DB2数据库的性能设计,还包括了DB2数据库如何通过合理的设计和调优来实现最高性能。文章深入浅出,避免了过于复杂的技术细节,而是将...

    阿里巴巴酒店数据库设计.zip

    《阿里巴巴酒店数据库设计》项目是基于Java Web技术和MySQL数据库实现的一款实用系统,旨在提供酒店管理的全面解决方案。这个项目不仅包含完整的源代码,还附带了数据库文件,使得用户能够轻松进行增、删、改、查等...

    数据库课程设计:学生信息管理系统.zip

    关系型数据库设计原则如第一范式(1NF)、第二范式(2NF)和第三范式(3NF)需要被遵循,以确保数据的规范化和减少冗余。 2. **ER模型**:实体-关系模型(Entity-Relationship Model)是数据库设计中常用的方法,...

    数据库建表原则-设计思想-查询优化

    在实际设计过程中,虽然可以设计出没有冗余的数据库,但这并不意味着它是最佳设计。为了提高性能,有时候需要适度地增加冗余数据。 #### 六、识别与处理多对多关系 在数据库设计中,多对多关系是比较复杂的情形之...

    数据库设计指南-数据库设计教程

    11. **数据库设计原则**:如KISS(保持简单和愚蠢)、YAGNI(你不会需要它)等,可以帮助避免过度设计。 12. **数据库设计工具**:例如MySQL Workbench、Oracle SQL Developer等,可以帮助我们更直观地进行数据库...

    政务平台数据库设计.pdf

    在设计省级政务平台数据库时,应遵循一系列原则,以确保数据的质量、一致性和安全性。以下是对这些原则的详细说明: 1. **标准化**:数据库设计需严格遵循相关技术标准,包括国土部的数据库建库规范、国家发布的...

    Access-2010数据库应用:数据库设计的基本原则.pptx

    在设计Access 2010数据库时,遵循正确的原则至关重要,因为这直接影响到数据库的效率、数据完整性和可维护性。以下是对这些基本原则的详细解释: 1. **一表一用**:这是数据库设计的基本原则之一,意味着每个数据表...

    数据库设计教程(第二版)pdf

    ### 关系数据库设计原则 1. **规范化**:通过对表结构的设计,消除数据冗余和异常,提高数据一致性和准确性。通常分为一范式、二范式、三范式乃至更高层次的规范化。 2. **反规范化**:在某些情况下为了提高查询...

Global site tag (gtag.js) - Google Analytics