精华内容
下载资源
问答
  • 我觉得逻辑外键比物理外键好。   你们是怎么想的?

    我觉得逻辑外键比物理外键好。

     

    你们是怎么想的?

    展开全文
  •  在最近的工作中发现,公司现有表都是没有主外键关系的,也就是没有加数据库外键约束,全部都是采用程序来控制数据的一致性。这点让我很是不解,从当初学习数据库,到参加工作使用数据库和设计数据库,一直都遵循...

    灵活运用数据库主外键

     在最近的工作中发现,公司现有表都是没有主外键关系的,也就是没有加数据库主外键约束,全部都是采用程序来控制数据的一致性。这点让我很是不解,从当初学习数据库,到参加工作使用数据库和设计数据库,一直都遵循数据库的三范式,表之间的关联采用数据库的主外键约束(请理解这是数据库的约束,而不是我们程序控制的约束)。于是查找了一些资料,现在的疑惑才慢慢解开。下面我将对数据库的作用,以及为什么出现应用程序,再到真正开发时如何设计数据库的一些理解和大家分享下,欢迎提出不同的见解。

      数据库是什么

      数据库,是计算机中运行的一个进程,它可以完成数据存储,查找,分析,数据挖掘等我们通常使用的功能(大家可以联想access数据库),只是其操作起来对人员的要求较高,必须要懂得sql语句的写法,深刻理解表之间的关系,当然也可以请专门的人员来帮忙将数据导出来,这样的工作实施起来麻烦还是比较大的。并不是每个人都懂sql语法,专门的人员(DBA)一般公司请不起,简单的操作人员,工作效率是个问题。数据库的功能是强大,但是面向的人群较为苛刻。所以在我的思维习惯中,数据库往往是一种后台的服务(不直接操作它,但是使用其提供的服务,sql语句就是它提供的接口),不过现在不能再这么认为了,我们可以仅仅利用数据库各种数据的操作,比如数据的录入,数据的分析等,但是这样的效率太低了,如果每天有上千条的数据(这里说少点)需要保持,那么单纯来使用数据库这将是一项浩大的工程,分析也一样,而且分析得出的数据用户不一定能看懂。于是有了我们的应用程序。

      数据库之上的应用系统

      如果单从数据库应用程序的角度来考虑,而不谈其它应用系统,其作用可以为我们提供一个透明的简单的数据录入,查询和分析。用户只需要点击某一个按钮就可以得到想要的结果。而且其面向的人群更大众化,正是有这样的特性,才使计算机真正的为更多人服务,用户完全可以认为不存在数据库,无论是网上购物,还是自己的数据备忘,抑或是分析最近关注信息的走势,都是一个按钮解决问题。再回到技术上,系统要想做到方便用户使用,到底应该怎么做?

      需要知道的两个概念

      OLAP和OLTP。一个是联机分析处理,一个是联机事务处理。联机分析强调的是数据查询和整合分析,数据修改较少,而联机事务则强调数据修改较多,对数据一致性要求较高。这就对应着两个系统,一个系统对查询的性能要求很高,方便数据的可移植,一个系统对数据完整性和一致性要求较高。因此我们在做系统设计时必须搞清楚系统的特性,如果是查询性能高而且数据结构的修改较多,数据移植频繁,那么在数据库的设计时就不能完全遵循三范式,因为这样数据库会有一定的自检策略而且比较豪性能,相反则更能很好的保证数据的正确性。

      结论

      知识还是要灵活运用的,范式在数据库中是真理,但是当和其它系统集成的时候就不一定完全合理,比如数据的冗余,如果经常做统计查询,那么将统计结果放到一张表中比关联几张表来查询快多了,而且用户看中的就是这个,其它让我们大胆相信自己的程序能够控制后,做好数据准确的把门将军。让数据库的最后一道关用在其它地方吧。








    ====================================分割线================================



    最新内容请见作者的GitHub页:http://qaseven.github.io/

    展开全文
  • 代码小白 初学djangoÿ...为什么有的双引号 有的不   <p style="text-align:center"><img alt="" height="788" src="https://img-ask.csdnimg.cn/upload/1617779793254.png" width="628" /></p>  </p>
  • Oracle数据库-外键约束

    千次阅读 2018-03-08 16:48:48
    在企业实战中有80%的企业不使用外键约束,有20%的企业使用外键约束,所以,外键约束与不,看的是实际情况下的公司要求是怎样的那问题来了,外键约束的作用是什么??1. 就是当两张表关联时,是通过id关联的, 外键所.....

    还是一样,首先我们先来了解一下什么是外键约束:

        所谓外键就是为了建立表与表之间的关系。外键是可以重复的,可以为空的。

        通常情况下一个表的外键是另外一张表的主键。

    在企业实战中有80%的企业不使用外键约束,有20%的企业使用外键约束,所以,

    外键约束加与不加,看的是实际情况下的公司要求是怎样的

    那问题来了,外键约束的作用是什么??

    1.

        就是当两张表关联时,是通过id关联的,

        外键所存在的表的字段正常情况下是可以随便填的,但没有丝毫意义,

        当添加了外键约束时,这个数就被限制起来了,只允许填入主表所有的id,

        如果在Oracle数据库中手动或代码写入无任何意义的id,

        则会报一个 " 违反完整约束条件,未找到父项关键字 " 的错误

    2.

        就是在当你设置了外键约束后,删除主表是无法删除的,只有通过先删除子表,再删除主表才可以删除

        会报一个"违反完整约束条件-已找到子记录"

        打个比方说,班级表与学生表相关联,班级表为主表,学生表是子表,那么这俩表相关联后就无法先删除班级表

        因为:"班级下还有学生"

    那如何通过代码实现外加约束的创建:

        alter  table  表名  add  constraint  外键约束名称  foreign  key  (外键字段名)  reference  参考的表名(id字段名);


    展开全文
  • 数据库外键之NULL值

    2014-07-17 11:14:56
    当一个表中存在外键,就说明此表受约束,那么我们在对数据库数据进行操作时就应该注意了,刚开始学习数据库时,总想着多用,主键,外键,等一些约束,能的都加上了,做系统的时候发现了很多错误。像级联删除,添加...

    数据库中主外键是为了保证数据库的完整性而存在的。当一个表中存在外键,就说明此表受约束,那么我们在对数据库数据进行操作时就应该注意了,刚开始学习数据库时,总想着多用,主键,外键,等一些约束,能加的都加上了,做系统的时候发现了很多错误。像级联删除,添加数据受外键约束等之类的事情就会出现,所以数据库中的主外键一定要慎用。

    从开始做系统到现在一直使用的都是Sql server。可是也只是使用一一些大路边的功能。合作版开发的时候,第一次正式的重视对数据库。严格按照软件工程的流程,从概念模型到物理模型 ,再到数据库表的建立。也是用了一些专业的数据库设计软件,例如:powerdesigner 。概念模型设计好后,需要转换成物理模型。

    概念模型到物理模型

    机房收费系统中有几张表:消费表,退卡表,充值表,账单表。结账的时候,我们对消费表,充值表,退卡表中未结账的信息进行汇总统计,得出数据,插入到账单表中,结账后,把把三个表中的数据再标记为已结账。它们之间的关系多对一,存在外键约束。如图:

     


    转换成物理模型:


    概念模型转换成物理模型,概念模型中存在的外键约束在物理模型中表现在消费表,充值表,退卡表中的”结账标号“。结账编号是账单表中的主键。这样消费表,退卡表,充值表,账单表保证了数据库之间的完整性。

    问题是:外键表中的数据是先插入进去的,而账单表中的数据是后插入的,这就意味着我们在插入外键表记录时,”结账标号“是不存在的,但是外键约束,我们在插入数据时,外键必须是已经存在的主键。

     

    我们可不可以在插入记录的时候使外键为”NULL“呢?

    在Sqlserver 中直接建立外键约束,插入记录外键为”NULL“是不允许的,从数据库库关系图中建立外键,再进行”NULL“值的设置,便大功告成了。

     

    设置外键NULL值具体操作

    1、新建数据库关系图:


    2、选中表,右击,表视图——标准,关系图如下:

    3、在图中红色区域中设置NULL值:下图中,新闻评论表的外键”新闻标题“是新闻表中的主键,这里设置为可以为”NULL“。在进行数据库插入时就可以插入外键为NULL值了。

     

     数据库约束慎用

    大家一起讨论都有同感,所以在使用数据库约束,主外键之类时,要根据具体情况来分析,系统不大,对数据的要求不是很严格,我们就可以少一些约束,这样方便系统的操作和运行;系统对数据库要求较严格,我们就必须严格按照三范式,必要的主外键,约束要加上,保证数据的完整性。


    展开全文
  • django2.0以后创建数据库外键的时候必须要on_delete参数,参数具体含义: CASCADE:这就是默认的选项,级联删除,你无需显性指定它。 PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出Prote...
  • 当一个表中存在外键,就说明此表受约束,那么我们在对数据库数据进行操作时就应该注意了,刚开始学习数据库时,总想着多用,主键,外键,等一些约束,能的都加上了,做系统的时候发现了很多错误。像级联删除,添加...
  • 数据库外键的作用

    2013-07-31 10:32:00
    外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。 FOREIGNKEY约束的主要目的是控制存储...
  • 这个帖子很牛: http://www.itpub.net/viewthread.php?tid=1313696&extra=&page=1  我的观点是,外键在初始阶段能的都加上,只有迫不得已的时候才disable或drop掉。遇到性能瓶颈的时候,尽量采用其它方式调优,...
  • 数据库外键

    2019-05-15 16:07:21
    主键常常与外键构成完整性约束,防止出现数据的不一致,数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引。 外键:用于建立和加强两个表数据之间的连接的一列或者多列。外键主要是用来维护两个表...
  • 数据库表要不要加外键

    千次阅读 2017-06-30 10:10:23
    因为最近遇到了一个数据库表完全没有外键的工程,关联关系都在代码中体现。所以有此疑问,网上搜相关讨论,存之,以便参考。来源:[url]http://blog.csdn.net/u010414666/article/details/48710385[/url] 对于主/...
  • 数据库 外键

    千次阅读 2009-01-08 22:04:00
    外键是什么? 外键 (FK) 是用于建立和... 外键数据库一级的完整性约束,由数据库自行维护.你也可以手动建立. 1如果存在外键关系的话,任何修改主表主键字段和删除主表行的行为,都是不可执行的. 2如果存在外键,,那么
  • (还未加外键约束) 1. mysql> show columns from message;//信息表 +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------...
  • 数据库【主外键

    2020-10-13 14:46:29
    数据库【主外键】 1、主外键的定义 主关键字(primary key ): 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。 外关键字(foreign key) : 是用于建立或加强两个表数据之间的链接的一列或多列。 如果...
  • 目录 一、外键使用场景 ...通过逻辑外键来解决了这个问题 二、为什么不使用物理外键 1.参考阿里手册 2.物理外键的优点 保证数据的完整性和一致性 级联操作方便 将数据完整性判断托付给...
  • MySQL数据库的主外键

    2020-09-08 22:48:14
    1、主外键的定义 主关键字(primary key ): 简称主键,它是表中的一个字段,它的值用于唯一地标识表中的某一条记录。 外关键字(foreign key) : 简称外键,是用于建立或加强两个表数据之间的链接的一列。 如果公共...
  • 是否应有数据库外键

    2011-03-01 08:59:08
    我的观点是,外键在初始阶段能的都加上,只有迫不得已的时候才disable或drop掉。遇到性能瓶颈的时候,尽量采用其它方式调优,而不要轻易牺牲掉外键。有外键约束的时候,写程序的确会有约束,但从直觉上说这种约束...
  • 从开发人员或者项目经理的角度讲不希望有外键,因为加外键相当于人为制造了障碍,开发效率和执行效率都低下。  外键约束的作用其实完全可以通过程序来控制完成,只要数据的操作在同一个事务内进行,出错能够回滚。...
  • 外键必须是另一个表的主键吗? 答: 不一定是主键,但必须是唯一性索引。 主键约束和唯一性约束都是唯一性索引。 FOREIGN KEY 约束 外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建...
  • select table_name, constraint_name, cname1 || nvl2(cname2, ',' || cname2, null) || nvl2(cname3, ',' || cname3, null) || nvl2(cname4, ',' || cname4, null) || nvl2(cname5, ',' || cname5, null) || ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 653
精华内容 261
关键字:

数据库加外键