关于数据库的疑问

问题描述

最近参加了一个的较大型的项目,发现pdm里面没有表与表的关系,仔细研究了一下,貌似全部关系是靠代码控制的,在库级别没有建立任何关系,突然发现这样做也挺不错的。问问大大们,数据库建立关系与不建立关系各有什么优缺点啊

解决方案

首先说一点,使用外键是为什么?外键的使用时为了在数据库的层级保证数据的一致性,完整性,更可靠。毕竟使用程序来控制的话,对于程序员的要求是比较高的。然后再说应用场景:追求的数据的完整性等,那就用上外键吧。毕竟不可控的因素太多了,还不如让数据库自己来保证。如果数据库都保证不了,那就game over啦。 追求性能,而且是在大数据量的频繁更新操作下。那就让外键去见鬼吧,这个时候外键还存在,不是完全的捣蛋吗?插入一条数据由于外键的存在还要去做一次一致性约束检测,这不是在浪费时间吗?所以在这种条件下,外键就有点不太实用了。当然你的数据量不大,那么你使用外键是没有问题的(数据量不大也不需要考虑高速写入的问题了 )所以说,这是一个权衡,看你用想要什么。参考:http://www.dewen.org/q/1814/mysql+%E5%A4%96%E9%94%AE%E9%97%AE%E9%A2%98题外话:如果你要高速写入大数据量,就不要用关系型数据库了,这个解决起来有点麻烦。现在不是NOSQL很火吗,看看这个吧。呵呵
解决方案二:
以前看过有人对这方面的一些说法,内容大概是这样。数据库建模时,应尽可能的实现相关的规范,比如多少范式之类的,使其完整性更完整些。(言下之意:外键什么的还是加上的)。当程序完成后,再把外键之类的约束删除(如果是数据库方面出现性能瓶颈的话),直接由代码控制。我倒觉得其实二种情况都挺符合实际的,只是看场景了。但有一样东西是最明显的,就是维护的成本。我只知道如果我接手一个系统,一打开数据库啥关系也看不到,那我觉得很痛苦在。
解决方案三:
建议不要用外建,容易出现n+1问题
解决方案四:
外键关系,我觉得大多数可以不建立。 可以最近的一个项目中,部门老大的习惯就是必须要建立外键关系。 说什么 这样数据可以随便删除,导致一些垃圾数据。 靠,生产环境上,谁去删数据啊。况且我们系统中做的都是软删除,除非客户的db去删数据,
解决方案五:
一般都不在数据库上建立主外键关系,都在代码里维护了!建在数据库里面在做数据麻烦,而且后期建索引的时候也有影响。
解决方案六:
个人建议数据中各表之间还是需要适当的主外键关系的,之前我进公司接手的是个二手项目,一年前搭建的,我们是在上面做二次开发,就是各表之间就没有相应的关系约束,很难维护,而且有大量的冗余数据。现在公司又做了几个项目,我们都是创建好各表之间主外键关系,这样结构清晰,数据关系清楚,容易维护。
解决方案七:
楼主说的是表与表之前并没有建立实际的外键关联吧,个人觉得外键关联实际的作用不大,反而会给操作数据带来阻碍。靠应用里边的领域模型来维护这些关系就显得更加的灵活。现在的数据库的主要作用还是在于存储这一单一功能,尽量不要使得数据库数据之间的规则变得复杂,能简单就简单吧。
解决方案八:
代码量大,如果关系复杂的话,维护代价高。pdm中不能直观的程现表与表之间的关系,只能靠读文档了解,很不方便如果直接对数据库操作很容易误删数据等
解决方案九:
和用泛型和不用泛型一样

时间: 2024-08-18 02:13:51

关于数据库的疑问的相关文章

java 数据库操作疑问,有没有大神?

问题描述 java 数据库操作疑问,有没有大神? java 要处理3张表 表直接没外键关联,3张表必须同时处理成功! 其中任何张表操作失败怎么处理:有没有好的事物处理,求正解 public void undoUpdate(CaseFreezeDTO dto) { // 保存bb2dc表 Bb2dc bb2dc = new Bb2dc(); BeanHelper.copyProperties(dto, bb2dc); hibernate.save(bb2dc); // 更新案件状态 Bb1a bb

C#连接服务器数据库的疑问

问题描述 我现在做一个员工考核软件需要把数据库放在服务器上,方便下面客户端访问我是必须在先在服务器上建立数据库,然后在编写客户端的时候连接上了在进行后面程序的编写.可以不可以我在自己电脑上编写程序的时候建立本地数据库,然后进行编写程序,等程序做好以后在把数据库放在服务器上,程序里的连接字符就改成服务器数据库的信息就可以直接连接了吗,跪求解答 解决方案 解决方案二:当然是后者了有些大型项目,服务器还没有开始采购,程序就已经同步在做了难道还必须等服务器到了才开始编程序,那哪赶趟了当然移到服务器上之后

c#与SQL数据库的疑问

问题描述 我用c#做了一个界面,其中主要有一个涉及到下单之后数量的减少.我所用的数据库是sql,每次下单之后,会有一个确认的窗口出来我是用messagebox实现的,点击确认之后就会返回到下单界面,但是商品的数目没有改变,需要从新载入,数据才会改变,我想怎么样在可以在下单之后,点击确认之后返回到下单界面的时候,就已近变了.(查看数据库也发现数据没有改变.貌似是没有执行,必须要在重兴载入再会改变).希望有谁能够帮帮我,我也可以发具体的代码 解决方案 解决方案二:听起来有点矛盾.数据库也没变,貌似没

如何批量生成1000条小写字母与数字组成的16位随机字符串并插入到数据库表内

问题描述 如何批量生成1000条小写字母与数字组成的16位随机字符串并插入到数据库表内 解决方案 解决方案二:生成随机数部分Randomrd=newRandom();改成Randomrd=newRandom(Guid.NewGuid().GetHashCode());插入数据库这个就没多大意思了吧或者你也可以生成2000条guid码,然后取出中划线取某段16位长度,然后去除重复的字符串后取前1000条插入数据库解决方案三:引用1楼starfd的回复: 生成随机数部分Randomrd=newRan

《MySQL技术内幕:InnoDB存储引擎第2版》——1.2 MySQL体系结构

1.2 MySQL体系结构 由于工作的缘故,笔者的大部分时间需要与开发人员进行数据库方面的沟通,并对他们进行培训.不论他们是DBA,还是开发人员,似乎都对MySQL的体系结构了解得不够透彻.很多人喜欢把MySQL与他们以前使用的SQL Server.Oracle.DB2作比较.因此笔者常常会听到这样的疑问: ?为什么MySQL不支持全文索引? ?MySQL速度快是因为它不支持事务吗? ?数据量大于1000万时MySQL的性能会急剧下降吗? -- 对于MySQL数据库的疑问有很多很多,在解释这些问

数据库-新人自学PHPmysql和mysqli对封装工具类的疑问

问题描述 新人自学PHPmysql和mysqli对封装工具类的疑问 学习php过程中发现 看着视频学的封装数据库工具类发现用的全是面像过程的方法 而调用的时候和直接用mysqli差不多感觉还没有直接用mysqli来的方便快捷 这样的话直接用mysqli还需要用mysql工具类封装吗? 解决方案 封装是为了复用,不了为封装而封装.开始的时候直接用,当你感觉代码有重复或者是抽象出一个工具类可以让代码更加简洁的时候,试着封装成工具类就 好.学习的时候的封装更多是为了教学. 解决方案二: php中关于m

关于访问数据库的线程卡死的疑问

问题描述 关于访问数据库的线程卡死的疑问 "http-nio-8080-exec-5" #82 daemon prio=5 os_prio=0 tid=0x00007f7a18004800 nid=0x7be5 runnable [0x00007f79a1459000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketI

[20170515]数据库启动的一个疑问.txt

[20170515]数据库启动的一个疑问.txt --//别人问的问题我自己以前也没有注意,做一个记录. 1.环境: SYS@book> startup   mount ORACLE instance started. Total System Global Area  634732544 bytes Fixed Size                  2255792 bytes Variable Size             197133392 bytes Database Buffe

画数据库图,然后生成对应的表的疑问

问题描述 我想做一个小程序..功能是画出数据库的表(写上属性,方法,约束)然后根据画的图..生成一个表~~不知该用什么技术??本人很想做出这个小程序...请各位指教~~ 问题补充:laorer 写道 解决方案 你熟悉哪个就用哪个,如果都不熟悉,你可以试下 html + div + javascript(jquery)操作起来比较容易,不过似乎要把生成的内容传给后台去处理,而且各个属性都要动态的存储在相应的div的属性中swing的话,开始可能会有点烦琐,不过可以直接是桌面应用,而且设计成可以一个