精华内容
下载资源
问答
  • 数据库主外键

    2017-06-24 22:14:00
    主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,... 外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能...

     

    主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。

     外键Foreign,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。

     

        外键的作用:

       保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!

     

        主外键的关系结构:

     

    1,一对一,不用引用主外键,把它们放一个表中即可

         例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可

    2,一对多,引用主外键,‘一’相当于主键,‘多’即是引用主键的外键。

         例如:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;

    3,多对多关系,需要创建一个表,表中需要两个字段,分别是引用,两个多对多字段主键的外键。
          

         例如:


    学生表(学号,姓名,…………)主键:学号
    课程表(课程号,课程名,…………)主键:课程号
    一个学生能选多门课,一个课可以由多个学生选,即是多对多关系,
    那么成绩表就是它们之间关系的体,
    即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键

    在我们现在这个阶段中,主要还是使用,主外键间的一对多的关系

     

    下面一起来简单看一下大概建成的表结构

    转载于:https://www.cnblogs.com/banxia123-ha/p/7074642.html

    展开全文
  • 灵活运用数据库主外键

    千次阅读 热门讨论 2012-06-17 00:32:07
    在最近工作中发现,公司现有表都是没有主外键关系,也就是没有加数据库主外键约束,全部都是采用程序来控制数据一致性。这点让我很是不解,从当初学习数据库,到参加工作使用数据库和设计数据库,一直都遵循...

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


    数据库是什么

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


    数据库之上的应用系统

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


    需要知道的两个概念

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


    结论

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



    一篇不错的文章,分享下

    http://www.iteye.com/news/24831




    展开全文
  • 数据库外键的作用

    2013-07-31 10:32:00
    通过将保存表中键值一列或多列添加到另一个表中,可创建两个表之间链接。这个列就成为第二个表的外键。 FOREIGNKEY约束主要目的是控制存储在外键表中数据,但它还可以控制对主键表中数据修改。例如,...

    外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

     

    FOREIGN KEY 约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了,则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。

     

    外键只能引用外表中的列的值!

     

    外键的作用:

     

    保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,就是当你对一个表的数据进行操作,和他有关联的一个或更多表的数据能够同时发生改变。

     

    例如一:

     

    a b 两个表

     

    a表中存有客户号,客户名称

     

    b表中存有每个客户的订单

     

    有了外键后

     

    你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x。

     

     

    例如二:

     

    例如有两个表

     

    A(a,b) :a为主键,b为外键(来自于B.b)

     

    B(b,c,d) :b为主键

     

    如果我把字段b的外键属性去掉,对编程没什么影响。

     

    如上面,A中的b要么为空,要么是在B的b中存在的值,有外键的时候,数据库会自动帮你检查A的b是否在B的b中存在。

     

    1、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该交给DBMS来做。

     

    2、使用外建,简单直观,可以直接在数据模型中体现,无论是设计、维护等回有很大的好处,特别是对于分析现有的数据库的好处时非常明显的--前不久我分析了一个企业现有的数据库,里面的参照完整性约束有的是外键描述,有的是用触发器实现,感觉很明显。当然,文档里可能有,但是也可能不全,但是外键就非常明显和直观。

     

    3、既然我们可以用触发器或程序完成的这个工作(指参照完整性约束),DBMS已经提供了手段,为什么我们要自己去做?而且我们做的应该说没有RDBMS做得好。实际上,早期的RDBMS并没有外键,现在都有了,我认为数据库厂商增加这个功能是有道理的。从这个角度来说,外键更方便。

     

    4、关于方便,根据我带项目的情况来看,程序员确实有反映,主要是在调试时输入数据麻烦:如果数据可以违反参照完整性,那么就是说参照完整性本身就不对名誉业务冲突,此时也不应该用触发期货程序实现;否则,说明数据是错误的,根本就不应该进入数据库!而且,这也应该是测试系统的一个内容:阻止非法数据。实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非程序的,储程序要尽量与数据分离,反之亦然。

     

     

     

    ---------------------------------------------------------------------

     

    建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。

     

    指定主键关键字: foreign key(列名)

     

    引用外键关键字: references <外键表名>(外键列名)

     

     

    转载于:https://www.cnblogs.com/jiangxiaxue/p/3227206.html

    展开全文
  • 主键Primary key,唯一标示一个实体。是保证数据库的实体完整...外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!主外键的关系结构: 1,

    主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和合理性,取值非空唯一。
    外键Foreign,是用来使表与表之间联系。用来保证数据库的参照完整性,外键的取值必须来自参照表参照列的值,可以为空也可不为空。

    外键的作用:
    

    保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!

    主外键的关系结构:
    

    1,一对一,不用引用主外键,把它们放一个表中即可
    例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可
    2,一对多,引用主外键,‘一’相当于主键,‘多’即是引用主键的外键。
    例如:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
    3,多对多关系,需要创建一个表,表中需要两个字段,分别是引用,两个多对多字段主键的外键。

     例如:
    

    学生表(学号,姓名,…………)主键:学号
    课程表(课程号,课程名,…………)主键:课程号
    一个学生能选多门课,一个课可以由多个学生选,即是多对多关系,
    那么成绩表就是它们之间关系的体,
    即引用成绩表(学号,课程号,成绩)。这里学号和课程号,分别是学生表和课程表中学号和课程号的外键
    在我们现在这个阶段中,主要还是使用,主外键间的一对多的关系

    下面一起来简单看一下大概建成的表结构

    –建班级表

    create table class(

    classid int primary key,–定义班级ID为主键

    classname varchar(15)

    )

    –建学生表

    create table students(

    studentid int primary key,–定义学生ID为主键

    classid int ,–外键值,跟班级表classid 属性类型相同

    stuname varchar(20),–学生姓名

    —定义外键

    foreign key(classid) references class(classid) –本表classid是基于class表classid的外键

    )

    如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,

    例如:

    –在班级表为空的情况往学生表插入一条记录是不允许的:
    insert intostudents(studentid,classid,stuname)values(1,1,’小明’)

    系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的;
    必须要先往班级表内插入一条记录:
    insert into class(classid,classname)values(1,’一班’)

    后才能执行插入前面一条往学生表插入信息的语句..

    解释:

    对于机房收费系统来说,如图:

    只有当学生注册了信息,有了卡号,在学生信息表中存在了,才可以进行充值,退卡,上下机等,主外键的作用也就是当没有学生信息时,我们不可以进行充值等操作,而且想要删除学生信息表中的数据,必须先将充值表,退卡表,上下机表中此卡号的人删除之后才可以删除学生信息表中的数据,这样就避免了当学生未注册时,就可以充值的情况
    
    也就是说,如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。
    
    外键是用来控制数据库中数据的数据完整性的 。就是当你对一个表的数据进行操作和他有关联的一个或更多表的数据能够同时发生改变,这就是外键的作用
    

    连接查询与内外键的关系:

    连接的 连接条件:A表的主键 = B表的外键如果做连接的两表没有主外键关系,那么连接结果没有意义。
    
    例:学生表和选课表做连接,select *from 学生表,选课表where 学生表.学号(主键)=选课表.学号(外键)
    
    主外键可以建级联级触发器,用来做级联删除、更新。作用原理还是因为主外键将两表联系。
    
    展开全文
  • 关系型数据库的外键约束与关联

    千次阅读 热门讨论 2020-10-07 18:22:57
    文章目录目录外键的作用外键的性能问题是否使用外键? 外键的作用 外键用于支持关系型数据库的 “参照完整性”,外键具有保持数据完整性和一致性的机制,对业务处理有着很好的校验作用。 举例说明:假设 Table user ...
  • 数据库主外键概念详细介绍

    千次阅读 多人点赞 2020-05-17 18:18:33
    关于数据库的主外键设置问题 一、主外键概念 主键 ​ 1、主键 ​ 简单而言,能够唯一表示表中每一行数据,这样列属性成为表主键,使用表主键可以保证实体完整性,可对表内数据进行修改、删除时使用主键来...
  • 数据库的主外键

    千次阅读 2012-06-11 09:38:22
    前几天做毕设的时候,用的数据库,当时写的时候就没有注意到表关联的问题,老师问到才想起这个问题,今天特意查了一下主键和外键的作用,和大家分享一下。 外键的作用: 保持数据一致性,完整性,主要目的是控制...
  • 剪不断,理不乱——数据库主外键的关系

    万次阅读 多人点赞 2012-08-18 07:32:22
    在做机房收费系统时,考虑到了主外键,所以学习了一下,下面我们一起来探究一下它们的关系。    主键Primary key,唯一标示一个实体。是保证数据库的实体完整性,保证数据中数据的正确性和... 外键的作用:  保
  • SQL的主键和外键的作用:外键取值规则:空值或参照的键值。(1)插入非空值时,如果主键表中没有这个值,则不能插入。(2)更新时,不能改为主键表中没有的值。(3)删除主键表记录时,你可以在建外键时选定外键记录一起...
  • 数据库之SQL的主键和外键的作用

    千次阅读 2016-05-24 17:33:24
    SQL的主键和外键的作用:  外键取值规则:空值或参照的键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键...
  • QL的主键和外键的作用:外键取值规则:空值或参照的键值。(1)插入非空值时,如果主键表中没有这个值,则不能插入。(2)更新时,不能改为主键表中没有的值。(3)删除主键表记录时,你可以在建外键时选定外键记录一起...
  • 主键:能够唯一标识数据表中每条数据字段,并且该字段非空值,就可以用primary key 声明该字段为外键:如果T表中t1字段和F表中主键是对应,就可以用foreign key声明t1字段为外键--创建学生表create table ...
  • 数据库主从表关系,主外键关系

    千次阅读 2017-07-24 11:47:38
    数据库主从表、关系;主、外键关系和作用(转) ...主外键的关系结构: 1,一对一,不用引用主外键,把它们放一个表中即可 例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可 2,一对多,引用主外键,
  • 1.外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性2.外键的配置1)先创建一个表,代码如下:#创建表student,并添加各种约束create table student(id int...
  • 主外键的关系结构:1,一对一,不用引用主外键,把它们放一个表中即可例如:一个学生只能有一个卡号,那么学生跟卡号放在一个表中即可2,一对多,引用主外键,‘一’相当于主键,‘多’即是引用主键的外键。...
  • 外键的作用: ①为了一张表记录的数据不要太过冗余。 ②保持数据的一致性、完整性。 是否有必要使用外键? 正方(需要) 1.数据一致性 由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据 ...
  • create table tableName( k1 int auto_increment, k2 varchar(50) not null, k3… primary key(k1), foreign key(kn) reference otherTable(ok) ); //此表主键为k1,外键为kn ...主键的作用:其值能唯一的标识每一...
  • 数据库在有外键的时候删除

    千次阅读 2012-02-25 17:24:16
    级联删除的作用就和添加一个删除的触发器大致相同 下面就是一个设置外键并且设置级联删除的例子: alter table 表名 add constraint 外键名 foreign key(字段名) references 表名(字段名) on delete ...
  • 如何在MySQL中设置外键约束以及外键的作用

    万次阅读 多人点赞 2016-08-05 10:58:00
    如何在MySQL中设置外键约束以及外键的作用 1.外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个表,代码如下: ...
  • 1.外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性2.外键的配置1)先创建一个表,代码如下:#创建表student,并添加各种约束create table student(id int...
  • 外键的作用 主键保证了数据的唯一性,外键保证了数据的完整性。 主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是...
  • SQL的主键和外键的作用: 外键取值规则:空值或参照的键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键...
  • 常见约束类型SQL中约束有列级和表级之分,列级约束作用于单一列,而表级约束作用于整张数据表,常见约束类型: NOT NULL约束:保证列中数据没有null值; DEFAULT约束:指定该列数据未指定时所采用默认值; ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 230
精华内容 92
关键字:

数据库主外键的作用