精华内容
下载资源
问答
  • 外码,参照关系和被参照关系

    千次阅读 2020-03-22 23:11:10
    定义: 设F是基本关系R的一个或一组属性,但不是关系R的码,K(s...例:学生关系的“专业号”属性与专业关系的主码“专业号”相对应,“专业号”属性是学生关系的外码,专业关系是参照关系,学生关系是参照关系 ...

    定义: 设F是基本关系R的一个或一组属性,但不是关系R的码,K(s)是基本关系S的主码。如果F与K(s)相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或者目标关系。关系R和S不一定是不同关系。
    例:学生关系的“专业号”属性与专业关系的主码“专业号”相对应,“专业号”属性是学生关系的外码,专业关系是被参照关系,学生关系是参照关系

    展开全文
  • E-R 图 (实体关系模型)E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一...

    E-R 图 (实体关系模型)

    E-R图也称实体-联系图(Entity Relationship Diagram),

    提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    它是描述现实世界关系概念模型的有效方法。

    是表示概念关系模型的一种方式。

    用“矩形框”表示实体型,矩形框内写明实体名称;

    用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;

    用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时

    在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。

    外键约束

    外键约束 foreign key,保持数据一致性,完整性实现一对一或一对多关系。(因为一个表只存一类信息。用外键来做参照,

    保证数据的一致性,可以减少数据冗余)

    外键约束的要求:

    数据表的存储引擎只能为InnoDB;

    外键列和参照列数据类型一致;

    外键必须关联到键上面去,一般情况是关联到,另一张表的主键.

    建立外键约束:

    建一个表a

    46610d12b8a93574c62881d9c270a7b3.png

    再建一个表b,并给它外键约束:

    de462383bc69f5469aed0fc0c5c5f005.png

    建立外键约束的语句:constraint `外键名` foreign key(ab_id) references `a`(a_id);

    foreign key(ab_id) references `a`(a_id);   默认给予外键名,不会重复。

    删除外键: alter table `b` drop foreign key dc_id;

    32cc0900df1712605ff8735bf8f1d349.png

    增加外键:

    7726efc93d38d2b95fa8a43624088d7b.png

    注意这里没有指定外键名,我们可以查看它的名字:

    8b23ef06e8429903d3f60e1134b7e5cc.png

    一对多关系

    举例:学校中一个学院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对

    多的关系,通过外键关联来实现这种关系。

    建立一个学院表和一个学生表,学生表有一个非空字段ss_id,将它关联到学院的编号(school_id),即学生必须属于某一个学

    院。

    b804f7bcd8723aeea4574f9ea5fdb1d2.png

    b30367cf93c2c1df4b069fa4db09b216.png

    给school表插入数据:

    449bd5bd0a9cc77e6ef3b5f972d93a51.png

    给student表插入数据:

    548ad5508f7e23fd15597f7c7e185a91.png

    如果插入数据时,ss_id 的值在school表的school_id值中没有则会报错;

    一对一关系

    举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当

    中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只

    有一条详细信息。用外键加主键的方式来实现这种关系。

    11e38e7fd6ffc7ae0dd81258e59a8536.png

    多对多关系:

    举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多

    对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。

    先建立课程表:

    a31e6c10cb4d37dca16f11a7aa3214ab.png

    再建立中间表student_course:

    de379f0d6b181b2f200909ee3dd3804c.png

    s_id对应于学生表的学生学号;c_id 对应于课程表的课程编号。

    查询中一些较为常见的函数

    #求最大年龄     mysql> SELECT MAX(`age`) FROM `student_details`;

    4a18db4d5160f29b268acb23dbd4fd2f.png

    #求最小年龄:

    98d72167fa766792c1461f90cb8dcaa0.png

    #其他一些操作:

    c022a65e6d59c05841daf850637155cc.png

    68f724bad5a33d9a9f6bd2ca7369ecb7.png

    展开全文
  • 多对一 单向关联 匹配 关系数据库中的外键参照关系 2008-09-06 12:22 映射 多对一 单向关联 [原创 2007-02-07 15:14:44]  读完 Java对象持久化技术详解6.1节,写一下读书笔记:  多对一 单向关联 匹配 ...

    多对一 单向关联 匹配 关系数据库中的外键参照关系
    2008-09-06 12:22
    映射 多对一 单向关联 [原创 2007-02-07 15:14:44]   

    读完 Java对象持久化技术详解6.1节,写一下读书笔记:

        多对一 单向关联 匹配 关系数据库中的外键参照关系。

         在关系数据库中,只存在外键参照关系,而且是由many--->one,是单向关联。

        以Customer和Order为例。

     

            单向关联中,Order中包含一个customer属性。这样定义了一个Order到Customer的关联,是多对一的。Customer中未包含Order属性.

           在Order.hbm.xml中,要进行关联映射Order类与ORDERS表。

           查看更多精彩图片         查看更多精彩图片

    单向关联中,Order中包含一个customer属性。这样定义了一个Order到Customer的关联,是多对一的。Customer中未包含Order属性.

           在Order.hbm.xml中,要进行关联映射Order类与ORDERS表。

           查看更多精彩图片         查看更多精彩图片

             id------ID         customer------CUSTOMER_ID

             映射 customer------CUSTOMER_ID需要 使用 many-to-one

            many-to-one用来建立customer属性和ORDERS表的外键CUSTOMER_ID之间的映射

             <many-to-one

                    name = "customer"        //待映射的持久化类的属性名

                   column = "CUSTOMER_ID"   //设定和该属性对应的表的外键

                   class = "Customer"        //设定该属性的类型

                    not-null = "true"         //表示customer属性不能为null,默认为false

                   cascade = "all"          //级联更新与Order类对象相关联的对象

            />

           一个概念:

           临时对象(transient)

                    刚刚通过new( )创建,并且未被持久化的对象。

                   Customer customer = new Customer();   //transient

                    session.save(customer); //执行完该语句后,customer成为持久化对象

     

         //------------------不同的配置出现的不同情况-----------------------

        cascade取默认值的情况

          <many-to-one

         Order order = new Order();

         order.setCustomer(customer);

         session.save(order);

          Hibernate持久化order时, 不会自动持久化与其相关联的其他对象,因为没有显示设置cascade属性的相关值。

         这样cascade取默认值none,当持久化order时,会执行类似如下语句:

         insert into ORDERS (ID,CUSTOMER_ID) values (1,null )

        这违反了数据库完整性约束,因为ORDERS表中设置的CUSTOMER_ID为 not null

       抛出异常:

          net.sf.hibernate.PropertyValueException: not-null property references a null or transient

         value: Order.customer

        删除 not-null = "true"后,

         会把order与customer一起持久化。

          insert into CUSTOMERS(ID,NAME) values( 1 , " haha")

         insert into ORDERS( ID, CUSTOMER_ID) values (1,1 )

         

     

          <many-to-one

         Order order = new Order();

         order.setCustomer(customer);

         session.save(order);

          Hibernate持久化order时,

        insert into ORDERS (ID,CUSTOMER_ID) values (3,null )

          这次成功持久化了order对象,不再抛出PropertyValueException,因为ORDERS表的CUSTOMER_ID允许null值出现

         但当Hibernate自动清理(flush)缓存中所有持久化对象时,抛出新的异常:

        net.sf.hibernate.TransientObjectException: object references an unsaved transient instance -

        save the transient instance before flushing: Customer

         flush -- Hibernate按照内存中持久化对象的状态 来同步更新数据库.

         Hibernate发现持久化对象order引用transient对象customer,而ORDERS表中相应的记录的

         CUSTOMER_ID字段为null,也就是说内存中的持久化对象的状态与数据库中的记录不一致。

         而且在这种情况下,Hibernate没办法使两者同步,因为Hibernate不会自动持久化customer对象,

         所以,Hibernate抛出 TransientObjectException异常。

        这时需要设置cascade属性来解决问题

          <many-to-one

                    name = "customer"        //待映射的持久化类的属性名

                   column = "CUSTOMER_ID"   //设定和该属性对应的表的外键

                   class = "Customer"        //设定该属性的类型

                   cascade = "save-update"           //当保存或更新当前对象时

                                                              //级联保存或更新与Order类对象相关联的对象

            />

           这样当执行

           Customer customer = new Customer();   //transient

          customer.setName("haha");

           Order order = new Order();

          order.setCustomer(customer);

          session.save(order);

     

                    name = "customer"         //待映射的持久化类的属性名

                   column = "CUSTOMER_ID"   //设定和该属性对应的表的外键

                   class = "Customer"        //设定该属性的类型

            />

        Customer customer = new Customer();    //transient

     

                    name = "customer"         //待映射的持久化类的属性名

                   column = "CUSTOMER_ID"   //设定和该属性对应的表的外键

                   class = "Customer"        //设定该属性的类型

                    not-null = "true"         //表示customer属性不能为null,默认为false

            />

        Customer customer = new Customer();    //transient

    展开全文
  • 关系的完整性-参照完整性

    千次阅读 2019-06-29 10:30:44
    (首先理解弄透实体完整性,实体完整性规则是最好理解的,再来理解参照完整性就不难了) 2.参照完整性 现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然...

    (首先理解弄透实体完整性,实体完整性规则是最好理解的,再来理解参照完整性就不难了)

    2.参照完整性

       现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。

       定义:设F是基本关系的一个或一组属性,但不是关系R的码(如果某张表多个属性作为主码,那么这里的主码不能理解为单个主属性,这也是码和主属性的区别),Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。关系和R和S不一定是不同的关系。

       2.1 一对多关系的理解

    学生实体和专业实体用下面关系表示:

         学生(学号,姓名,性别,专业号,年龄)

                  (Sno,Sname,Ssex,Smajor,Sage)

         专业 (专业号,专业名)

                   (Major,Mname)

    (黑体加下划线的属性为主码)

    1. 两个关系之间存在着属性的引用,及学生关系引用了专业关系的主码“专业号”。显然这个“专业号”必须是确实存在的专业号,打个比方,学校现在只开了计算机,政治,数学,
    专业
    专业号 专业名
    001 计算机
    002 政治
    003 数学

       

     

     

     

     

            我总不可能添加一个学生是小偷专业的吧!!!所以这也是为什么参照完整性规则是对多个关系(关系可以理解为实体或关系,实体或关系可以理解为一张表,也就是多张表,不懂可以翻阅上篇博客)的约束 ,所以现在我每在学生表添加一个学生都要参照专业表。

           回到定义,设F是基本关系的一个或一组属性,(这里的F可以指学生表专业号),但不是关系R(这里指学生表)的码,Ks(专业表专业号)是基本关系S(专业表)的主码,如果F(学生表中的专业号)与Ks(专业表专业号)相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系。关系R和S不一定是不同关系(这句话可以忽略,影响现阶段的理解)。

          有了上面的定义与对照的关系表示可以弄懂

         学生表中红字专业号为外码,基本关系R(学生表)为参照关系,基本关系S为被参照关系。

        所以当你设置学生表中的专业号为外码  (前提是已经创建专业表ZMajor,实体完整性不用我多说吧,顺序不能弄反)

         CREATE TABLE Student

    (  Sno CHAR(9),

       Sname CHAR(4),

       Ssex  CHAR(2),

       Smajor  CHAR(9),

       Sage  SMALLINT,

    PRIMARY KEY(Sno),/*这里定义了实体完整性,Sno不能取空值,参照上一篇博客*/

    FOREIGN KEY(Smajor)  REFERENCES ZMajor(Major)/*定义了参照完整性,学生表专业号引用专业表专业号*/

    ON DELETE CASCADE   /*当删除ZMajor表中的某个专业的时候,比如学校取消了某个专业,级联删除这个专业的所有学生

                                                当然,如果你正在学计算机,学校如果取消计算机专业,你的信息(学生表)也会进行级联删除

                                                 所以一般学校等你们毕业了,计算机专业不招人了也没有人了,学校再来取消这个专业,所以这个                                               级联删除不是很常见。毕竟是贴近现实世界,大学取消某个专业*/

    ON UPDATE CASCADE /*理解了上面的注释话,这个就好理解了,当更新ZMajor表中某个专业信息,比如你们校长疯了,计算机专 业全部取搬砖专业,所以你们所有计算机专业的学生专业号001-计算机,统一是001-搬砖,其实学生表中001并没有改变,但是当查询到你的时候,比如连接查询,嘿嘿,那你就是搬砖专业*/

     

      

    )

    级联操作只是参照完整性被破坏时采取策略的一种,默认策略为NO ACTION(拒绝执行),有了上面的理解基础,不难理解当INSERT插入学生表中数据,你加了一个不存在的专业号,这就就是为上面数据库就会拒绝执行。查询的话不改变数据库中的原则。参照完整性被规则破坏一般是被参照表中(例子中的专业表)的内容被修改,破坏时的操作均写在参照表的定义中。

    以上部分时一对多的关系,如果有需要的话私我,我可以继续更新多对多参照完整性。

     

    展开全文
  • ERA模型中的主/外键参照关系

    千次阅读 2007-07-03 23:23:00
    ERA即:Entity Relation Attribute 实体关系属性针对三种关系,遵循以下原则:1、表A和表B是一对一的关系:也就是说,你既可以将表A的主键(记为Pa)列添加到表B中充当外键,也可以将表B的主键(记为Pb)列添加到表A...
  • 二 ISO22000与HACCP的关系 国际标准化组织(ISO)于2005年9月发布了ISO 22000:2005《Food safety management system-Requirementsfor any organizations in the food chain》,我国以等同采用的方式制定了国家标准...
  • 有食品同仁问:“食品安全标准与ISO、GMP、HACCP等体系之间的相互关系。”上述体系是按照国际法典委员会及相关国际组织要求和惯例而引入的。在我国的食品安全领域,其内容主要体现在国家食品安全标准的食品卫生规范...
  • 数据完整性 要想了解这三类完整性约束首先要了解什么是数据完整性。数据完整性是指数据库中存储的数据是有意义的或正确的,和现实世界相符。...实体完整性和参照完整性是关系模型必须满足的完整性约束...
  • 什么是数据库的参照完整性?

    千次阅读 2019-09-24 06:33:02
    解答:数据库的参照完整性是指表与表之间的一种对应关系,通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现。 有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程中...
  • 当我们把2张表建立联系的时候,这2个表肯定是有关系的。它可以是一对一的关系;如果是多对多的关系,这是不允许出现的...参照完整性规则要求:1、不允许在“多端”的字段中输入1个“一端”主键不存在的值;2、如...
  • 文件夹中的文件是微信的好友列表数据,冒号前是一个用,冒号后是该用户的所有好友(数据中的好友关系是单向的),参照笔记,求出哪些人两两之间有共同好友,及他俩的共同好友都有谁? 本题声明: 1.采用Linux系统 2....
  • 参照完整性

    2020-04-12 12:11:26
    定义关系的参照完整性就是要定义哪个属性是该关系的外码,它要参照的是哪个关系的主码 语法: 在CREATE TABLE 中用FOREIGN KEY 短语定义外码, ...首先先定义表级主码,再依次定义外码,并说明被参照关系 ...
  • 参照完整性约束:如果关系R2的外部码Fk与关系R1的主码Pk相对应,则R2中的每一个元组的Fk值或者等于R1中某个元组的Pk值,或者为空值;意义:如果关系R2的某个元组t2参照关系R1的某个元组t1,则t1必须存在;例如关系...
  • 以下是使用JPA 2.0创建单向@OneToMany关系的方法:@Entitypublic class Customer {@Id@Column(name="cust_id")private long id;...@OneToMany@JoinColumn(name="owner_id", referencedColumnName="cust_id")private ...
  • 2.3.3 参照完整性

    2016-11-16 01:09:36
    2.3.3 参照完整性(Referential Integrity) 设F是基本关系R的一个或一...并称基本关系R为参照关系(Referencing Relation),基本关系S为被参照关系(Referenced Relation)或目标关系(Target Relation)。关系...
  • 关系的完整性是关系型数据模型结构中的另一组成部分,它分为实体完整性、参照完整性和用户定义完整性三类。在关系数据库中一个关系对应现实世界的一个实体集,关系中的每一个元组对应一个实体。在关系中用主关键字来...
  • 数据完整性的分类在关系模型中,提供了实体完整性,参照完整性,用户定义完整性。二.实体完整性2.1什么是实体?实体是一个数据对象,指的是客观存在并可以相互区分的事物,比如学生,老师等。一个实体在数据库中对应...
  • 今天继续分享工程文件属性的设置,包括工程坐标参照系、变换、默认样式、数据源、关系和变量六个部分。 01坐标参照系 工程坐标参照系定义了当前地图窗口所使用的坐标系,决定了如何将数据从其底层原始坐标绘制...
  • 这次的学习笔记分享的是自学William L....上一节对图的概念、图的基本问题和统计量做了简述,传送门在炸带鱼:图神经网络和图表征学习笔记(一)​zhuanlan.zhihu.com本次笔记内容主要侧重如何量化节点间的关系(rel...
  • 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值...
  • 定义参照完整性

    千次阅读 2020-03-31 22:32:54
    定义参照完整性的概念: 现实世界中的实体之间往往存在着某种联系,在关系模型中实体及实体之间的联系都是用关系来描述的,因此可能存在着关系关系间的引用。 例如:学生实体和专业实体可以用下面的关系模式表示,...
  • 外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系。这里以用户表...
  • ARC之循环参照

    2015-05-10 23:43:37
    一般情况下,当对象之间有“父子关系”时,强参照的情况发生的比较多。比如通讯薄对象AddrBook和每个通讯录Entry的关系如下。 这种情况下,由于Entry对象被AddrBook强参照,所以不能释放。另
  • 三相系统是指由三个频率相同,最大值相等,相位互差120°的正弦电势组成的供电体系。进入火灾区的消防人员()。网络蚂蚁下载工具所用的技术手段不包括()。进入火灾区的消防人员()。关于小微企业免征增值税优惠政策,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,036
精华内容 814
关键字:

参照关系是