`

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

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

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


我想问下,这样2种表的设计都各有啥利弊?
分享到:
评论
74 楼 zistrong 2012-08-23  
现在怎么在oracle创建外键都忘了~
73 楼 w156445045 2012-08-22  
博主,请问下您是怎么处理这些个蜘蛛网的呢、有没啥快捷的办法啊?
我以前都是手动调整的。
72 楼 bobocici 2011-05-18  
外键不光是保证数据完整性的,更重要的功能是帮助优化器做出正确的选择。

以oracle中经典的scott模式举例,
假如以下场景,当你做两个表的join查询时,又没有在where条件中指定dept的条件,而且select列中也没有出现dept的列,别说这种情况不会出现,应用中层层定义的视图导致这种情况出现的非常频繁,如果没有emp指向dept的外键,那么优化器只能按照要求老老实实去做两个表的连接,因为它不知道两个表是父子表的关系,有外键的话这种开销其实是不必要的。

还有人说在海量数据库中不存在外键关系,这种说法是相当不负责任的,外键在数据仓库中的作用更大。没有外键,星状转换(star transformation)就不可能产生,没有外键,位图连接索引(bitmap join index)就不可能建立...这些东西在海量数据查询中的基础。说到性能损失,其实索引的性能损失更大,那在海量数据库中要不就不要索引了?

其实对于程序自己保证数据的完整性的这种说法我也很怀疑,姑且不论完整性是否能得到正确的保证,你能确定你自己实现完整性的逻辑能优于数据库自身的实现么?

71 楼 supttkl 2011-05-13  
一张表开几百个字段也不错啊,我见过很多系统,越是大型的,越是一个表的字段越多!
70 楼 supttkl 2011-05-13  
很正常!非常正常!
69 楼 dixian 2011-05-08  
我在项目中的使用:
核心业务逻辑:必须使用外键保证数据的一致性和完整性;
非核心业务:比如引用到数据字典、地区等,只是标明此处有关联关系,但不使用外键。
比如系统日志需要记录who,what等,这些只需要标识有关联关系即可,不需要建立外键关联。
68 楼 robert 2011-05-06  
如果不需要 RDBMS 来保证数据一致性,何必用关系型数据库?
外键仅仅在你的数据没有 normalize 时候,才会产生所谓很高额外代价。这也意味着你不需要 join 查询,否则外键是自然使用的。请随便找本关系型数据库的书,看看 RDBMS 的数学原理。维护数据库性能,则需要高水平的 Dba 来优化,而不是让程序员来乱妥协。
至于目前的 NOSQL 潮流,主要要解决的是数据库的 scale out 问题,而不是简单的性能更好。何况几乎所有高性能 NOSQL 分布式数据库都是靠牺牲了 Acid 来获得分布能力,即对数据的一致性要求不高。看看 cap 三角规则就知道这两种技术是不同的取向。RDBMS 取正确性,牺牲可用性。在基本程序设计上,两者思路也几乎相反:RDBMS 数据应是 normalize 的,而 NOSQL 经常是 denormalize 冗余和无关系的。
67 楼 jhaij 2011-05-01  
fsplove520 写道
fnet 写道
别说网站,金X的企业应用也没有外键。

这个兄弟说的是金蝶吧。嘿嘿

应该是金山
66 楼 yangleilt 2011-04-29  
steptou 写道
qiushily2030 写道
steptou 写道
qiushily2030 写道
一张表200个字段  其中和99张表有关系   你也全部建外键?


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

兄台有何高见,洗耳恭听


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

目前没发现特别好的方法


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

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

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


最多用过100多张表的表示鸭梨很大! 敬听经验!!!!
65 楼 fsplove520 2011-04-27  
fnet 写道
别说网站,金X的企业应用也没有外键。

这个兄弟说的是金蝶吧。嘿嘿
64 楼 jhaij 2011-04-26  
看你做项目还是做产品,项目高内聚,产品松耦合
63 楼 angeltping 2011-04-25  
steptou 写道
100个表之间竟然一个关系都没有,就是没有外键?

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


我想问下,这样2种表的设计都各有啥利弊?

电信行业这种很普遍,没有外键的原因是,割接需要导入历史数据。而且历史数据有部分的异常数据,
如果建立外键,数据割接麻烦,而且有些外键建不起,这个就是产生这种情况的最大的原因。
电信行业的软件都有历史数据,基本除了配置数据这种数据量较少的可以建外键,其他实例数据都不建。
62 楼 ppgunjack 2011-04-24  
nosql可以看到明显的应用不是网状关系而是树形关系,并且涉及的应用都不是对一致性有严格要求的场景
用不用外键其中一个标准就是,数据能多大程度容忍进沙子
61 楼 fandayrockworld 2011-04-24  
到底该用不用外键这个问题已经被讨论烂了。
大牛们都也各持不同的意见,但基本上的调调是:
产品不成熟、在完善的时候用外键;产品定型以后把外键去掉。

微博的出现又推动了nosql的发展,真不知道以后会咋样。。。。
60 楼 catchwang 2011-04-22  
在项目中,可以不采用外键,这样方便操作。
59 楼 agile_boy 2011-04-20  
结论是,人的惰性太大了。
对于一锤子的开发,其实都无所谓,但是如果想要项目可维护,外键是必不可少的。
当然了,现在有很多的orm工具,可以大大减少手工维护。
58 楼 robot2008 2011-04-19  
F**K小测验,唉,刚开始也用外键,后来,慢慢的就全删了.
57 楼 ppgunjack 2011-04-18  
以前分析过索引到底性能冲击是什么部分

数据量大,大到什么程度

不受保护的数据是很危险的雷,尤其是表间关系复杂的情况,做做报表就算了,如果你的关键业务依赖于此,还是自求多福
56 楼 jeff312 2011-04-18  
aa87963014 写道
pengmj 写道
在高性能大数据量的系统中,用外键是自讨苦吃。


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

用外键有时候确实是比较烦,但是这个对高性能有什么影响???


数据怎么检查,靠文档好不?

数据对不对,测试team得给力,相对于业务逻辑的错误数据,违反关联约束的情形也算不得什么了。

过多的关联约束很可能大幅降低开发的效率。以我所在项目为例,开发数据库靠一个maven-carbon5 的project来维护,包括建表、插入初始数据、虚拟运行时数据、建立索引等等都由包含在carbon5 project内的一系列SQL文件里。每天早上的例行公事就是svn更新carbon5 project,然后运行重建开发数据库。一般来说需要增加一个什么表,即使是一个关系节点,也可以简单地将相应DDL和虚拟数据append到项目的SQL文件序列尾端。一旦因此更新闹出了什么问题,只需删除末尾的那个SQL文件即可回滚。如果表之间都采用外键约束,那么作为关系节点的新表就需要嵌入到某个较早的SQL文件中,并且那个较早文件的其它部分(如插入语句的顺序)也很可能需要修改以满足外键约束,这种事多起来,大家都死定了,虽然有svn的比较功能,追溯起来也会很麻烦的,吃饱了撑着么。

至于外键对性能的影响,前面有人说的很清楚了,约束是什么,就是随时检查你插入的数据对不对。怎么检查,如果是唯一键约束,那每插入一条记录,整个表在这个column上的值都会被扫一遍,以确认新加入的数据并不违反这一约束,难道这种扫描不耗费数据库的性能资源?

btw,我的项目的所有表,除了主键没有任何其他约束。
55 楼 l101y1982j 2011-04-18  
不用键啊不用键~~~

相关推荐

    用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