`

今天看了个开源的web应用,近100个表,用power designer逆向后看表间关系,结果出来了,吓了一跳。。。

Web 
阅读更多
100个表之间竟然一个关系都没有,就是没有外键?

相应的,别的应用的表间联系却比蜘蛛网还蜘蛛网,


我想问下,这样2种表的设计都各有啥利弊?
分享到:
评论
54 楼 aa87963014 2011-04-17  
pengmj 写道
在高性能大数据量的系统中,用外键是自讨苦吃。


性能再高也不过高在一小部分,还有不用外键数据怎么检查。完全靠程序员的自我意识?

用外键有时候确实是比较烦,但是这个对高性能有什么影响???
53 楼 wm920 2011-04-16  
kimmking 写道
xsnxj 写道
表间有联系可以防止出错和乱引用(开发人员),表间无联系可以随意修改和执行具体没有定义哪种的好坏,一般是系统设计员制作的会带上表间联系,相反是临时应用就会出现无表间联系的情况,具体看需求

表有fk的关联,也就有了约束,
优点,数据的一致性,
缺点,插入删除、备份迁移的问题,性能,等等

数据的一致性一般都是要保证的,不用库的关系的话,需要程序里自己去保证。
这个跟 identity字段有点类似,数据库支持identity/increment或者sequence,
再或者不用数据库的,自己写个identity的机制。


具体根据需求来分析

同意该说法
52 楼 pengmj 2011-04-16  
在高性能大数据量的系统中,用外键是自讨苦吃。
51 楼 forever8tf 2011-04-16  
海量数据存储有搞头啊~DB2与Oracle的xmltype不知道有没有搞头,相当于no-sql了是不是?
50 楼 gongrunlian 2011-04-16  
表列与列之间数据关联,但不建FK
49 楼 evanzzy 2011-04-15  
需要权衡,不一定就不能用或一定要用。如果对性能影响不大,而可靠性要求又高的话,还是加上外键更好些。

代码控制也没有问题,但是写代码的时候就确实要有整体意识
48 楼 ysj5125094 2011-04-14  
kimmking 写道
xsnxj 写道
表间有联系可以防止出错和乱引用(开发人员),表间无联系可以随意修改和执行具体没有定义哪种的好坏,一般是系统设计员制作的会带上表间联系,相反是临时应用就会出现无表间联系的情况,具体看需求

表有fk的关联,也就有了约束,
优点,数据的一致性,
缺点,插入删除、备份迁移的问题,性能,等等

数据的一致性一般都是要保证的,不用库的关系的话,需要程序里自己去保证。
这个跟 identity字段有点类似,数据库支持identity/increment或者sequence,
再或者不用数据库的,自己写个identity的机制。


支持 kimmking 说的... ...
47 楼 cectsky 2011-04-14  
幽梦新影 写道
外键一般都不会用的,但在设计时一般都会说明这是主外键关系,建表就不一定用了


me too!
46 楼 wdq 2011-04-14  
kimmking 写道
xsnxj 写道
表间有联系可以防止出错和乱引用(开发人员),表间无联系可以随意修改和执行具体没有定义哪种的好坏,一般是系统设计员制作的会带上表间联系,相反是临时应用就会出现无表间联系的情况,具体看需求

表有fk的关联,也就有了约束,
优点,数据的一致性,
缺点,插入删除、备份迁移的问题,性能,等等

数据的一致性一般都是要保证的,不用库的关系的话,需要程序里自己去保证。
这个跟 identity字段有点类似,数据库支持identity/increment或者sequence,
再或者不用数据库的,自己写个identity的机制。




赞同这位仁兄的见解!!!
45 楼 bewithme 2011-04-14  
最好用,不然容易产生脏数据,特另是你要不能过DB来操作数据的时候
44 楼 zhyuan 2011-04-14  
    这个应该看场景,可以归纳为是程序来维护外键关系还是用数据库来维护关系。
    数据库中使用外键,能够保证的完整性,不会出现脏数据,但肯定会有性能影响,适用于对数据要求比较严格的项目。数据库不使用外键,而是由程序比如hibernate、jpa来控制,这样数据库备份、迁移时比较爽,性能也优越,但是程序不当,会产生数据冗余,无法保证数据的完整性。
43 楼 thinkforever 2011-04-14  
代码保证,太浮云了。性能影像有人实际测试过吗,大约什么量级?
42 楼 cmland 2011-04-13  
外键不仅要降低性能,而且对于数据维护很不友好。不用更健康。如果是超大数据量的表更不会用外键。我们公司开发所用的表除了主键,索引外,少量唯一键,外键从来不用。(我们公司的数据库有好几个表千万级数据量,如果要用外键,对插入,删除影响很大的)。
41 楼 quanwsx 2011-04-13  
我们也没用。
40 楼 nearboy 2011-04-13  
在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个字段有外键,这样扫描的数量是成级数的增长!在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。
39 楼 jimzhao 2011-04-13  
写程序的时候想不到表间的关系,用了外键也无济于事。
38 楼 qinglintan 2011-04-13  
外键是一种约束而已,有效保证数据完整性,但是它付出的代价也是很大的,所以很多人就去掉这些东西了
37 楼 DOCDOC 2011-04-13  
N年前在学校时候见过所谓的外键, 呵呵
36 楼 qiushily2030 2011-04-13  
steptou 写道
qiushily2030 写道
steptou 写道
qiushily2030 写道
一张表200个字段  其中和99张表有关系   你也全部建外键?


是我的话,建立第3个表(或者10个左右的表,看需求),存储第一个表和其他99个表的关系

兄台有何高见,洗耳恭听


这想法不错,可惜这种方法读取数据的时候太麻烦了吧。而且我现在做的系统  数据库表不下五百张
加上视图有一千张+

目前没发现特别好的方法


存在即表明其合理,如果不涉及保密的话,能透露下现在怎么处理的吗?

相信各位做普通应用的很少遇到500个表和1000+视图的吧,至少我没有遇到过(参加过的最大项目表数目才300个不到)

细细道来,就当是给我们上堂公益课,不胜感激!


加上视图才 1000张  主要采用的方法就是关键的几个表建下主外键   其他表都不建的
35 楼 wxno1 2011-04-13  
用代码保证数据一致性?谁能写出来万无一失的代码?要是大家都能保证,那没BUG的代码自然也能写出来了啊

相关推荐

    用power Designer生成mysql表关系视图的方法

    总结以上知识点,使用Power Designer生成MySQL表关系视图是一个涉及数据库管理、ODBC驱动配置以及Power Designer操作的应用过程。掌握这些知识点不仅有助于数据库管理员和开发人员进行高效的工作,也能够帮助相关IT...

    iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,一款ITSM工具

    iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,用于IT环境的日常运营。它基于ITIL最佳实践,而又不拘泥于任何具体流程。它很灵活,可以适应不管是非正式的、务实的流程,还是严格遵循ITIL的...

    开源Web报表制作工具OpenReports3.0简介

    OpenReports是一款强大的开源Web报表制作工具,专为生成、管理和分发各类报表而设计。它提供了灵活的报表设计,支持多种数据源,并且与多种开源技术栈无缝集成,如Java、Tomcat、JDBC等。在OpenReports3.0版本中,这...

    web游戏-web开源网页游戏代码(仅供学习使用)

    "Web游戏-Web开源网页游戏代码(仅供学习使用)"这个标题指出,这是一份关于Web游戏的开源代码库,主要用于教学目的。这里的“Web游戏”指的是在网页浏览器上运行的游戏,无需下载安装即可游玩。而“开源”意味着...

    Mail Web开源版(邮件系统客户端)

    总之,Mail Web开源版是邮件系统客户端领域的一个创新实践,它将复杂的邮件处理功能与Web技术相结合,提供了一种轻量级、易用的解决方案。无论是对个人开发者还是企业团队,都能从中受益,通过理解和利用开源代码,...

    一款开源Web图片编辑器,助开发者快速构建图片编辑器应用

    它是一款基于Fabric + Vue3开发的一款开源Web图片编辑器,二次开发简单、扩展便捷,可帮助开发者快速构建一个面向非专业设计人员的图形编辑器。 项目以Fabric.js 为底层,使用Vue3框架和精致的View UI Plus组件库...

    淘宝客开源web应用1.0.1(php-api2.0)

    【淘宝客开源Web应用1.0.1 (PHP-API2.0)】是一个基于PHP编程语言构建的开源项目,主要用于与淘宝开放平台(Taobao Open Platform, TOP)的API2.0版本进行交互。该应用旨在帮助开发者或者商家更好地利用淘宝的数据资源...

    JBPM4_WebDesigner

    3. **WebDesigner**:作为JBPM4的一个重要组件,WebDesigner是一个基于浏览器的工具,无需安装即可使用,大大降低了使用的门槛。用户可以通过Web界面进行流程设计,保存的设计可以直接在JBPM服务器上部署,实现快速...

    Web桌面应用框架 HoorayOS v2.0 开源免费版.rar

    HoorayOS是一款web桌面应用框架,你可以用它二次开发出类似Q web这类的桌面应用网站,也可以开发出适合项目的桌面管理系统。 简化开发 HoorayOS考虑到不同业务会涉及到各种需求及展示模式,所以在HoorayOS里,会...

    [其他类别]开源WEB在线SQL管理工具 v1.0.1_web_sql_manager.zip

    【其他类别】开源WEB在线SQL管理工具 v1.0.1_web_sql_manager.zip是一个非常实用的资源,它提供了一个基于Web的SQL管理平台,允许用户远程或者本地通过浏览器对数据库进行操作。这款开源工具旨在简化数据库管理工作...

    用于铁路基础设施设计、容量分析、时间表和模拟的开源Web应用程序___下载.zip

    标题中的“用于铁路基础设施设计、容量分析、时间表和模拟的开源Web应用程序”是指一个专门针对铁路行业的软件工具,它提供了全面的功能,包括设计、分析、时间表制定以及模拟操作。开源意味着源代码对公众开放,...

    WEB开发常用JAR包

    8. **MYSQL**:MySQL是一个关系型数据库管理系统,广泛应用于Web应用中。它具有快速、可靠且成本效益高的特点,支持多种操作系统,并且提供了丰富的编程接口,便于开发者进行数据库操作。 以上这些JAR包在Web开发中...

    基于DEM4CHE和Web的开源DICOM浏览器(oviyam0.9)

    【基于DEM4CHE和Web的开源DICOM浏览器(oviyam0.9)】是一个用于查看和处理DICOM医学影像数据的应用程序。DICOM(Digital Imaging and Communications in Medicine)是医疗行业中广泛使用的标准,用于存储、传输和...

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许Web应用程序在客户端的JavaScript和服务器端的Java之间进行直接的、异步的通信,实现了Web应用中的Ajax功能。DWR通过自动化处理JavaScript和Java之间的类型...

    JavaScript_开源视频编辑web应用程序.zip

    这个"JavaScript_开源视频编辑web应用程序.zip"压缩包显然包含了一个使用JavaScript技术实现的开源视频编辑工具,这对于开发者来说是一个宝贵的资源,可以学习到如何在Web环境中处理视频流、实现剪辑、特效等高级...

    开源六位半万用表.rar

    综上所述,这个压缩包是一个全面的开源六位半万用表资源集合,涵盖了从理论学习到实际操作的多个层面,对于电子爱好者和专业工程师来说,都是一个极好的学习和开发平台。通过深入研究这些材料,可以增进对数字多用表...

    开源的快速web开发框架

    WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单。 作为一款高效的Web开发工具,WebBuilder的特色是: .基于浏览器的集成开发环境 ...

    JAVA开源的WEB测试工具

    15. **CubicTest**:一个开源的Eclipse插件,提供图形化界面设计Web应用测试,降低了测试的复杂度,使得非技术人员也能进行测试。 以上这些工具各有特色,可以根据项目的具体需求选择合适的测试框架。它们的出现...

    java web 开源 物流软件

    综上所述,这款Java Web开源物流软件提供了一个完整的物流解决方案,结合B/S架构的易用性和Java的稳定性能,为物流行业带来了高效、灵活的选择。通过开源社区的支持,软件能够持续迭代和优化,满足日益复杂和个性化...

    Rukovoditel 3.2.1 - Project Management/CRM:基于 Web 的开源项目管理应用程序-开源

    Rukovoditel 是一个免费的基于 Web 的开源项目管理应用程序。 与传统应用程序相去甚远,Rukovoditel 为用户提供了更广泛和广泛的项目管理方法。 其自定义选项允许用户创建其他实体、修改和指定它们之间的关系,并...

Global site tag (gtag.js) - Google Analytics