精华内容
下载资源
问答
  • 数据完整性分为实体完整性、域完整性、参照完整性。实体(行)完整性实体完整性中实体指是表中行,因为一行记录对应一个实体。实体完整性规定表一行在表中是唯一实体,不能出现重复。实体完整性通过表主键来...

    数据完整性的概念

    数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入。

    数据完整性分为实体完整性、域完整性、参照完整性。

    实体(行)完整性

    实体完整性中的实体指的是表中的行,因为一行记录对应一个实体。

    实体完整性规定表的一行在表中是唯一的实体,不能出现重复。

    实体完整性通过表的主键来实现。

    主键关键字: primary key

    主键特点: 不能为null,并且唯一。

    主键分类:

    ​ 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)

    ​ 业务主键:例如username,参与实际的业务逻辑。

    主键使用方式:

    ​ 方式一:

    Create table t1(

    ​ id int primary key,

    ​ name varchar(100)

    );

    59139dc806db3d21328205604f340f9a.png

    插入数据:

    insert into t1 values(1,’zs’);

    insert into t1 values(2,’ls’);

    4a96f5901fcd5fcf393266ac6032ec01.png

    主键自动增长:

    关键字: auto_increment

    下面是主键自动增长的例子

    ​create table t4(

    ​id int primary key auto_increment,

    ​name varchar(100)

    );

    64a93a33911adc42c512d458b250e89e.png

    插入数据:

    insert into t4(name) values(‘zs’);

    insert into t4 values(null,’ls’);

    f6125de11c80674938032575923f7c87.png

    域(列)完整性

    域(列)完整性指数据库表的列(即字段)必须符合某种特定的数据类型或约束

    ​ 非空约束:not null

    ​ 唯一约束: unique

    create table t5(

    ​username varchar(100) not null unique,

    ​gender varchar(100) not null,

    ​phonenum varchar(100) unique

    ​);

    87ac9ccb8f22a61133dc8cbf8cac0404.png

    username 唯一 ,如果有重复就会出现错误:

    [Err] 1062 - Duplicate entry 'ls' for key 'username'

    如果第二次插入代码insert into student3(username,gender,phone) VALUES('ls','男','112');

    就会出现错误:[Err] 1062 -关键字“用户名”的重复条目“ls”

    gender 不能为 NULL,如果不输入就会出现错误:

    Field 'gender' doesn't have a default value

    执行下面这条代码insert into student3(username,gender,phone) values('ll','男','113');

    就会出现错误Duplicate entry 'll' for key 'username'

    关键字“用户名”的重复条目“ll”

    c8481e4c23d1832248701006cc6d390e.png

    80c8a2b9cec22027398305c6c79a1082.png

    参照完整性**

    参照完整性指的就是多表之间的设计,主要使用外键约束。

    多表设计: 一对多、多对多、一对一设计

    一对多

    下面举例说明:

    1.客户和订单的关系就是一对多,一个客户可以有多张订单,一张订单属于一个客户;

    f44e6143ae6101aaf6ddc9aa4a2f1826.png

    ​ 创建客户表:

    create table customers(

    ​id int,

    ​name varchar(100),

    ​address varchar(255),

    ​primary key(id)

    );

    创建订单表:

    create table orders(

    ​order_num int primary key,

    ​price float(8,2),

    ​status int,

    ​customer_id int,

    constainct customer_id_fk foreign key(customer_id) references customers(id)

    );

    外键约束: constraint customer_id_fk foreign key(customer_id) references customers(id);

    注: constraint: 约束的意思。foreign key: 外键。references: 参照

    创建一个名叫customer_id_fk的外键约束,其中外键指的是customer_id,并且参照的是 customers表中的id列。

    图形界面操作的过程是:

    7ef9c0ec38acce68ab5b7359a8375388.png

    46345cba6abdb67187c15d1852c5e030.png

    11fcf199785654c2a1c5e151bc434cf1.png

    a1c935b4010be152d3a56c2a9b51b203.png

    a3ba3b79ca16916d0b191927aba8b63e.png

    子表的删除、更新策略

    子表的删除更新策略一共有四种:

    1. CASCADE 级联策略。

    使用此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改子表

    f43287de11db6a602ee6bab00c8072f1.png

    89d86223b803f4d528d8b6d96011725e.png

    9fc69da3457035665faa31320ec95a04.png

    2. NO ACTION 无动作策略。

    使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值。

    16bd542fb3062fe98ec95a7bd0b77215.png

    3. RSTRICT 主表约束策略。

    此种策略对主表的约束跟 NO ACTION 一样

    4. SET NO 置空策略。

    使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。

    2d09c24bfc5b2065f780e55fd1e6dc95.png

    dd52f7080e40ca59cbe4660386d93f2c.png

    73b7b9d48415f728b386d12efa52bed1.png

    多对多

    老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教

    9201eceb8319bffba00de45bfe46432b.png

    注意:

    需要创建第三张表,并且公共的字段,可以放入到第三张表格中。

    设置外键对应其他表格中的主键

    创建老师表:

    ​Create table teachers(

    ​id int,

    ​name varchar(100)

    ​salary float(8,2),

    ​primary key(id)

    );

    创建学生表:

    Create table students(

    ​id int,

    ​name varchar(100),

    ​grade varchar(100),

    ​primary key(id)

    );

    第三张表格:

    Create table teacher_student(

    ​t_id int,

    ​s_id int,

    ​primary key(t_id,s_id)

    CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),

    CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)

    );

    28352f28a2aaf3f6a5e231a465429a7c.png

    2fc2d5cacc9af3b3a7da75738c47bf7b.png

    5263a73ebae24bd630fb07da55401449.png

    一对一

    按照外键关联

    1.在IdCard表中的外键添加唯一约束

    1fa6dce4de8e4edfc7c96c5bff6a71f7.png

    按照主键关联,对主键添加外键约束

    d54e66acf463ac7911d496204978e1c9.png

    实际开发中直接设计一张表格就可以了。

    注意:

    一般情况,设计一张表格即可;

    设计成两张表格:

    第二张表格中创建一个字段为外键(设置成唯一 unique)对应 第一张表格中的主键;

    直接使用第二张表格中的主键为外键,对应第一张表格中的主键。

    展开全文
  • 数据完整性分为实体完整性、域完整性、参照完整性。2.1实体(行)完整性(实体完整性中实体指是表中行,因为一行记录对应一个实体)实体完整性规定表一行在表中是唯一实体,不能出现重复。实体完整性通过表...

    一、数据完整性

    数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入。

    数据完整性分为实体完整性、域完整性、参照完整性。

    2.1实体(行)完整性

    (实体完整性中的实体指的是表中的行,因为一行记录对应一个实体)

    实体完整性规定表的一行在表中是唯一的实体,不能出现重复。

    实体完整性通过表的主键来实现。

    主键关键字: primary key

    主键特点: 不能为null,并且唯一。

    主键分类:

    逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)

    业务主键:例如username,参与实际的业务逻辑。

    主键使用方式:

    方式一:

    Create table t1(

    Id int primary key,

    Name varchar(100)

    );

    Insert into t1 values(1,’zs’);

    Insert into t1 values(2,’ls’);

    主键自动增长:

    关键字: auto_increment

    create table t4(

    id int primary key auto_increment,

    name varchar(100)

    );

    Insert into t4(name) values(‘zs’);

    Insert into t4 values(null,’ls’);

    2.2域(列)完整性

    指数据库表的列(即字段)必须符合某种特定的数据类型或约束

    数据类型

    长度

    非空约束:NOT NULL

    唯一约束:UNIQUE

    CREATE TABLE t5(

    username varchar(100) NOT NULL UNIQUE,

    gender varchar(100) NOT NULL,

    phonenum varchar(100) UNIQUE

    );

    2.3参照完整性

    参照完整性指的就是多表之间的设计,主要使用外键约束。

    多表设计**: 一对多、多对多、一对一设计**

    2.3.1一对多(1* N)

    1.客户和订单的关系就是一对多,一个客户可以有多张订单,一张订单属于一个客户;

    步骤:

    (1).画出客户和订单的表格

    (2).画出customer_id外键列,进行外键约束。

    (3).代码实现

    2. 代码实现:

    创建客户表:

    CREATE TABLE customers(

    id int,

    name varchar(100),

    address varchar(255),

    PRIMARY KEY(id)

    );

    创建订单表:

    CREATE TABLE orders(

    order_num int primary key,

    price float(8,2),

    status int,

    customer_id int,

    CONSTRAINT customer_id_fk FOREIGN KEY(customer_id) REFERENCES customers(id)

    );

    // 外键约束:

    // constraint customer_id_fk foreign key(customer_id) references customers(id);

    注: constraint: 约束的意思**。foreign key**: 外键。references: 参照

    创建一个名叫customer_id_fk的外键约束,其中外键指的是**customer_id,**并且参照的是 customers表中的id列。

    1.3.2多对多

    老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教多个学生

    a4283b22fcdd3b53b32cc4d81027dbd1.png创建老师表:

    Create table teachers(

    id int,

    name varchar(100)

    salary float(8,2),

    primary key(id)

    );

    创建学生表:

    Create table students(

    id int,

    name varchar(100),

    grade varchar(100),

    primary key(id)

    );

    第三张表格:

    Create table teacher_student(

    t_id int,

    s_id int,

    primary key(t_id,s_id)

    CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),

    CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)

    );

    #主键primary key 的三种表达方式:

    id int primary key

    primary key(id)

    alter table teachers add primary key(id)

    1.3.3一对一

    按照外键关联

    在表中的外键添加唯一约束

    52b22650f2aad1977084981d509b6653.png

    按照主键关联

    对主键添加外键约束

    855412f2e03a553cb07a69fd666e3819.png

    展开全文
  • 数据库完整性的整理

    2019-07-25 10:14:07
    实验名称 数据库完整性的整理 实验地点 实验楼502 实验日期 5月8日 ... 掌握参照完整性的实现方法 4. 掌握用户定义完整性的实现方法 二、实验环境 SQL+win10 三、实验内容 1. ...

     

    实验名称  数据库完整性的整理 实验地点 实验楼502 实验日期  58             

     

    一、实验目的及要求

    1. 掌握实体完整性的实现方法

    2. 掌握域完整性的实现方法

    3. 掌握参照完整性的实现方法

    4. 掌握用户定义完整性的实现方法

    二、实验环境

    SQL+win10

    三、实验内容

    1. 建立课程的实体完整性, 和课程号 Cno 的参照完整性;

    课程的实体完整性:

    alter table course

    add

    constraint pk_cno

    primary key(cno)

    课程号Cno的参照完整性:

    alter table sc

    add

    constraint FK_cno                                                      

    foreign key(cno) references course(cno)

    2. 对 HRM 数据库,练习建立三个表的主外键约束、唯一约束、取空值约束、用户自定

    义的约束(参考 HRM 数据库表定义图中说明);

     主键约束:

    Department表:

    alter table Department

    add

    constraint FK_DepartmentID

    primary key(DepartmentID)

    Employee表:

    alter table Employee

    add

    constraint FK_EmployeeID

    primary key(EmployeeID)

    外键约束:

    Salary表:

    alter table Salary

    add

    constraint FK_EmployeeID

    foreign key(EmployeeID) references Employee(EmployeeID)

    Employee表:

    alter table Employee

    add

    constraint FK_Employee_Department

    foreign key(DepartmentID) references Department(DepartmentID)

    唯一约束:

    Department表:

    alter table Department

    add

    constraint UNIQUE_Department

    UNIQUE (DepartmentID)

    Employee表:

    alter table Employee

    add

    constraint UNIQUE_Employee

    UNIQUE (DepartmentID)

    Salary表:

    alter table Salary

    add

    constraint UNIQUE_Salary

    UNIQUE (EmployeeID)

    非空约束:

    alter table Employee alter column EmployeeID char(6) not null

    alter table Employee alter column Name       char(10) not null

    alter table Employee alter column Birthday   datetime not null

    alter table Employee alter column Sex        bit not null

    alter table Employee alter column DepartmentID char(3) not null

    Department表:

    alter table Department alter column DepartmentID char(3) not null

    Salary表:

    alter table Salary alter column EmployeeID char(6) not null

    alter table Salary alter column Income   float(8) not null

    alter table Salary alter column Outcome   float(8) not null

    用户自定义约束:

    alter table Employee

    add

    constraint CK_Sex

    check(sex in('',''))

    3. 建立 salary 表的 Income 字段限定在 0-9999 之间

    alter table Salary

    add

    constraint CK_Salary_Income

    check(Income between 0 and 9999)

    四、实验总结

    本次实验进行的比较顺利,有了前几次的铺垫,这次操作感觉顺了好多,对子句更加熟悉了,还是要注意细节,稍不注意还是会有错误,一定要按要求来规范自己。

     

     

     

     

     

     

    展开全文
  • 在引入了或声明了相关表或类后就能够使用它下面的方法,例如: (1)@Table(name = "bsp_corp_spl", catalog = "bspdb")  (2)private BspCorpSplId id;  private BspCorp bspCorp; 因为...


    在引入了或声明了相关表或类后就能够使用它下面的方法,例如:
    (1)@Table(name = "bsp_corp_spl", catalog = "bspdb")
      (2)private BspCorpSplId id;
        private BspCorp bspCorp;
    因为要在dao类中使用HQL语句实现SELECT * FROM Table1 t1 WHERE t1.id.name=? AND t1.id.email=?
    选出复合主键类的所有记录;所以要在类中实现get整体的方法,此时使用了复合主键类;
    复合主键类给出实现equal,hashcode方法。
    一、参照实体之间@OneToMany
        1、在被参照端的POJO类中注释:
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="bspCorp")//单向的声明被参照类联级在被参照端声明?

        public Set<BspMySplContact> getBspMySplContacts() {
            return this.bspMySplContacts;
        }
        2、参照端的注释:
     @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "CORP_ID", nullable = false, insertable = false, updatable = false)//使用被参照类主键作为外键。
        public BspCorp getBspCorp() {
            return this.bspCorp;
        }


    @AttributeOverrides由多个@AttributeOverride注释组成,每个@AttributeOverride表示属性的映射,它的定义如以下所示:

    @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)

    public @interface AttributeOverride {

    String name();

    Column column();

    }
    二、复合主键实体类调用嵌套类:
    在使用@AttributeOverride注释应注意以下几方面的问题:
    1、了解嵌入类字段的含义
         name属性表示被嵌入类中的属性名称。

        column属性表示,对应所要嵌入的实体类的表,其中的name 为列字段的名称。

      例如将tb_customer表中的customer_zip字段映射为Address嵌入类中的属性zip。代码如下所示:

    @AttributeOverride(name = "zip",

    column = @Column(name = "customer_zip")

    )
    2、嵌入类可以多次被引用
          使用嵌入式类的好处是:多个实体中都可以共享一个嵌入式类,方便了对实体的操作。
                             例如现在ContactEO也嵌入Address类,就很方便的映射为以下所示:


    public class CustomerEO implements Serializable {
              private Integer id;
               private String name;
                private String nickname;
          ……getter和setter方法省略
                  private Address address;
      @Embedded
      @AttributeOverrides( {

                       @AttributeOverride(name = "zip", column = @Column(name = "contact_zip")),

                       @AttributeOverride(name = "line1", column = @Column(name = "contact_line1")),

             })
     public Address getAddress() {

                       return address;
        }

             public void setAddress(Address address) {

                       this.address = address;
       }
    }
    三、实现复合主键嵌套类中的定义:
    package com.bsp.entity;
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
    import org.hibernate.validator.Length;
    import org.hibernate.validator.NotNull;
    /**
     * BspCorpSplId entity.
     * @author Java Web2.0项目开发进阶宝典
     */
    @Embeddable
    public class BspCorpSplId implements java.io.Serializable {
        // 字段属性  
        private String corpId;
        private String spl;
         /**默认构造器 */
        public BspCorpSplId() {
        }
        @NotNull(message = "编号不能为空")
        @Length(min = 1, max = 5, message = "编号长度应在1至5之间")
        @Column(name = "CORP_ID", nullable = false, length = 5)
    //因为在调用了嵌套类的实体类中已经将其初始化,所以此处的字段为已知

        public String getCorpId() {
            return this.corpId;
        }
        public void setCorpId(String corpId) {
            this.corpId = corpId;
        }
        @Column(name = "SPL", nullable = false, length = 5)
        public String getSpl() {
            return this.spl;
        }
        public void setSpl(String spl) {
            this.spl = spl;
        }
        public boolean equals( Object other) {//要实现的两个方法
            if ((this == other))
                return true;
            if ((other == null))
                return false;
            if (!(other instanceof BspCorpSplId))
                return false;
            BspCorpSplId castOther = (BspCorpSplId) other;

            return ((this.getCorpId() == castOther.getCorpId()) || (this
                    .getCorpId() != null
                    && castOther.getCorpId() != null && this.getCorpId().equals(
                    castOther.getCorpId())))
                    && ((this.getSpl() == castOther.getSpl()) || (this.getSpl() != null
                            && castOther.getSpl() != null && this.getSpl().equals(
                            castOther.getSpl())));
        }
        public int hashCode() {
            int result = 17;

            result = 37 * result
                    + (getCorpId() == null ? 0 : this.getCorpId().hashCode());
            result = 37 * result
                    + (getSpl() == null ? 0 : this.getSpl().hashCode());
            return result;
        }
    }

    展开全文
  • 1. 掌握实体完整性的实现方法 2. 掌握域完整性的实现方法 3. 掌握参照完整性的方法 4. 掌握用户定义完整性的实现方法实验要求 二、实验环境 硬件平台:PC; 软件平台:Windows 10 / SQLSERVER 2008 R2; 三、...
  • DB 的完整性控制

    2020-11-29 20:25:51
    定义 数据库完整性控制是指保证 DB 中数据正确性、有效性和相容性,防止错误数据进入 DB 。 DB 完整新控制 (1)提供定义完整性约束条件的方法,用完整性规则形式...这是对参照完整性规则补充。下面通过具体.
  • 数据库的完整性约束

    2020-12-01 21:23:15
    数据库完整性 1.定义 定义:数据库完整性是指数据正确性和相容性 正确性:是指数据是符合现实世界语义、反映当前实际状况. 相容性:是指数据在不同表中...2.参照完整性: F是关系R外键是关系S主键F取值必须 取
  • 参照完整性是对关系间引用数据一种限制。即:若属性组A是基本关系R1外码,它与基本关系R2主码K相对应,则R1中每个元组在A上值必须:要么取空值,要么等于R2中某元组主码值。 实现方法 外键约束 4.自定义...
  • 掌握实体完整性的实现方法。 掌握用户定义完整性的实现方法。 掌握参照完整性的方法。 二、实验内容 数据库的完整性设置。 三、实验步骤 可视化界面的操作方法: 实体完整性 将 student 表的“sno”字段设为...
  • 数据库完整性

    2021-01-15 21:35:18
    数据库完整性 数据库完整性是指数据正确性和相容性 数据正确性是指数据是符合现实世界语义、反映当前实际状况 ...SQL使用了一系列概念来描述完整性,包括实体完整性、参照完整性、用户定义完整性。
  • 数据库完整性是指数据正确性和相容性。 数据正确性是指数据是符合现实世界语义、反映当前实际状况...数据库完整性实体完整性参照完整性用户定义完整性完整性约束命名子句 实体完整性 一、实体完整性定义:PRIMAR.
  • 掌握域完整性的实现方法。 掌握实体完整性的实现方法。 掌握参照完整性的方法。 二、实验内容 数据库的完整性设置。 练习一:请通过数据完整性策略实现数据的完整性。 1.表的建立 1.1XSQK表的建立 CREATE TABLE ...
  • 关系完整性实体完整性:一个基本关系通常对应现实世界一个实体集参照完整性:现实世界中实体之间往往有某种内在联系用户自定义完整性:用户自定义约束条件 关系数据库设计之时要遵守一定规则。尤其是数据库...
  • 2、 掌握实体完整性、参照完整性和用户自定义完整性的定义和维护方法; 3、 掌握数据库触发器的设计和使用方法。 二、 实验内容 3.2数据库完整性实验 打开ScoreDB数据库,完成以下操作: (1)分别定义ScoreDB数据库...
  • 1. 通过对完整性规则的定义实现,熟悉了解SQL Server数据库中实体完整性、参照完整性、断言等完整性保证的规则和实现方法,加深对数据完整性的理解。 2. 通过对安全性相关内容的定义,熟悉了解SQL Server数据库中...
  • 在本文中,我们提出了一种新向量阶,这是将数学形态学推广到多分量图像和多维数据... 我们的方法的基本鲁棒以及与噪声有关鲁棒已经过测试。 梯度,拉普拉斯算子和中值滤波器算子结果表明了我们新阶性能。
  • 1. 通过对完整性规则的定义实现,熟悉了解SQL Server数据库中实体完整性、参照完整性、断言等完整性保证的规则和实现方法,加深对数据完整性的理解。 2. 通过对安全性相关内容的定义,熟悉了解SQL Server数据库中...
  • 第5章 数据库完整性 | 数据库知识点整理 了解 ...使用触发器实现数据库完整性的方法 用SQL语言定义关系模式的完整性约束条件 定义每个模式的主码 定义参照完整性 定义于应用有关的完整性 ...
  •   本章主要介绍一下数据库完整性:实体,参照,用户自定义...2.提供完整性检查的方法 3.进行违约处理 一、实体完整性 1.定义实体完整性 【例 5.1】将Student表中Sno属性定义为主码。 create table Student ( Sno
  • 实现表与表之间的参照完整性 在使用ORDER BY,GROUP BY子句进行数据检索时,利用索引可以减少排序和分组时间 2、索引分类 索引按照存储方法分类,可以分为两类: (1)B树索引存储结构类似图书索引...
  • 实现一个总线通信模块,该模块具有定义完整、接口清晰、功能完备、可靠特点,能够满足未来汽车电子复杂车辆网络要求。以 基于CAN 总线通信系统为例,在飞思卡尔公司MC9S12DG128 开发板上实现了该总线通信...
  • 基于SQL SERVER触发器技术的实现

    千次阅读 2005-04-05 12:42:00
    主要体现在以下几个方面:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)和用户自定义完整性(User define Integrity)。目前,已有多种方法来解决这个问题...
  • 外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据的完整性和一致性两个表必须是InnoDB表,MyISAM表...
  • 数据库四种完整形

    2020-11-09 22:51:23
    参照完整性是对关系间引用数据一种限制。即:若属性组A是基本关系R1外码,它与基本关系R2主码K相对应,则R1中每个元组在A上值必须:要么取空值,要么等于R2中某元组主码值。 实现方法 外键约束 4.自定义...
  • 外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据的完整性和一致性 两个表必须是InnoDB表,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

参照完整性的实现方法