数据完整性

数据库外键的使用以及优缺点

☆樱花仙子☆ 提交于 2019-12-03 16:25:22
摘录网上讨论共同观点: 主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作, 矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。 正方观点: 1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。 eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢? 2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。 3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。 反方观点: 1,可以用触发器或应用程序保证数据的完整性 2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题 3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert, update, delete 数据的时候更快) eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不 止一个字段有外键,这样扫描的数量是成级数的增长

复习六――数据库完整性

匿名 (未验证) 提交于 2019-12-03 00:32:02
数据库完整性概念 数据库完整性是指保护数据库中数据的 正确性:数据的合法性 有效性:数据是否在有效范围内 相容性:指表示同一个事实的两个数据应该一致 完整性规则定义 D(Data):约束作用的数据对象 O(Operation):触发完整性检查的数据库操作,立即检查还是延迟检查。 A(Assertion):数据对象要满足的断言或语义规则 C(Condition):受A作用的数据对象值的谓词 P(Procedure):违反完整性规则时触发的过程 完整性约束按约束作用类型分类 域完整性 域是一组具有相同类型的值的集合。SQL支持域的概念。通过以下语句创建域,并对其中的限制命名。 create Domain GenderDomain char ( 2 ) constraint chkGD check (value in ( ‘ 男 ‘ , ‘ Ů ‘ )); # 使用域,sex的取值来自GenderDomain create Table student ( Sno char ( 10 ), sex GenderDomain, Sname char ( 20 ) ) 实体完整性 关系模式R的主码不可为空 参照完整性 参照关系R的任一个外码值必须等于被参照关系S中所参照的候选码的某个值,或者为空 完整性的实施途径 约束(Constraint) 主键约束(Primary Key) 唯一键约束

关系完整性约束

匿名 (未验证) 提交于 2019-12-02 23:43:01
分为: 域完整性 实体完整性 参照完整性 用户定义完整性 域完整性是保证数据库字段取值的合理性。 属性值 应是域中的值,这是 关系模式 规定了的。除此之外,一个属性能否为NULL,这是由语义决定的,也是域完整性约束的主要内容。 包括检查(CHECK)、 默认值 (DEFAULT)、不为空(NOT NULL)、外键(FOREIGN KEY)等约束。 实体完整性(Entity integrity)是指关系的主关键字不能重复也不能取“空值"。 现实世界中的实体是可以相互区分、识别的,也即它们应具有某种惟一性标识。在 关系模式 中,以主关键字作为唯一性标识 参照完整性(Referential Integrity)是定义建立关系之间联系的主关键字与外部关键字引用的约束条件。 在学生管理数据库中,如果将选课表作为参照关系,学生表作为被参照关系,以“学号\"作为两个关系进行关联的属性,则“学号\"是学生关系的主关键字,是选课关系的外部关键字。选课关系通过外部关键字“学号’’参照学生关系。 用户定义完整性(user defined integrity)则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。这一约束机制一般不应由应用程序提供,而应有由 关系模型 提供定义并检验,用户定义完整性主要包括字段有效性约束和记录有效性。 辨析:将年龄字段值限制在12

oracle――05数据完整性

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> 数据的完整性就是指数据库中的数据在逻辑上的一致性和准确性。数据完整性一般分为3种:域完整性、实体完整性和参照完整性。完整性约束是通过限制列数据、行数据和表之间的数据来保证数据的完整性。完整性约束定义在表上,存储在数据字典中。 1、域完整性 域完整性又称列完整性,是指确定一个数据集对某一列是否有效和确定是否允许空值。域完整性通常是通过使用有效性检查来实现的,还可以通过限制数据类型、格式或者可能的取值范围来实现。 Oracle可以通过check约束实现域完整性。check约束表示一个字段的输入必须满足check约束的条件,若不满足,则数据无法正常输入。 利用SQL语句操作check约束主要有如下几种方式: (1)利用SQL语句在创建表时创建check约束 Sql代码 create table tableName( columnName dataType [ not null | null ] [ default expression] check (checkExpression), columnName dataType [ not null | null ] [ default expression] constraint checkName check (checkExpression), ...n ) 示例代码:

数据库整理(四)数据库安全性与完整性

爷,独闯天下 提交于 2019-12-02 23:00:39
数据库整理(四)数据库安全性与完整性 安全性 数据库的安全性保护数据库以防止不合法使用所造成的数据泄漏、更改或破坏 数据库的不安全因素 : 非授权用户对数据库的恶意存取和破坏 ---用户身份鉴定 存取控制 视图 数据库中重要或敏感的数据被泄露 ---强制存取控制、数据加密存储、加密传输。审计 安全环境的脆弱 与操作系统的安全性、网络协议安全保障有关 数据库系统安全模型 安全措施是一级一级层层设置的。用户要求进入计算机系统时,系统首先根据输入的用户标识进行 用户身份鉴定 ;只有合法的用户才准许进入计算机系统;对已进入系统的用户,数据库管理系统还要进行 存取控制 ,只允许用户执行合法操作:操作系统也会有自己的保护措施:数据最后还可以以 密码形式 存储到数据库中。 与数据库有关的安全技术 用户身份鉴别、多层存取控制、审计、视图、数据加密 用户身份鉴定 每个用户赋予唯一的一个身份标识 静态口令鉴别(密码)、动态口令鉴别(一次一密 短信密码 动态令牌)等 存取控制 确保只授权给有资格的用户访问数据库的权限 --DBMS存取控制机制 定义用户权限 将用户权限登记到数据字典中( 权限是用户对某一数据对象的操作权力 ) 合法权限检查 用户发出存取数据库操作请求后,DBMS根据在数据字典查找,根据安全规则进行权限检查,无权限进行拒绝 两类存取控制方法 自主存取控制方法

Sql Server 数据完整性规则

匿名 (未验证) 提交于 2019-12-02 22:56:40
表的概念 表由记录组成,记录由字段组成,字段由字符或者数字组成。表:统一管理的相关数据的集合。 数据模型及数据库 经典数据类型:网状、层次、关系。SQL Server属于关系型数据模型。 SQL特点:面向windows服务器系统,真正的客户机/服务器体系结构、图形化管理、丰富的编程接口工具、良好的伸缩性、对web技术的支持、提供数据仓库功能. Oracle:可运行与70多种操作系统上,稳定性高、性能高,在导数据工具方面比Sql功能更强。Oracle可以按照条件把文本文件数据导入.Oracle的安全机制比Sql好. Mysql:体积小、速度快、总体拥有成本低,开源,支持多种操作系统. 系统数据库:master、model、msdb、tempdb. master:记录系统级别信息,如登录用户,其他数据库位置等。 model:数据库模板。 msdb:用于Sql代理计划警报和作业。 tempdb:保存临时对象或中间结果集。 数据完整性规则 实体完整性:这条规则要求关系中元组在组成主键的属性上不能有空值.如果出现空值,那么主键值就起不了唯一标识元组的作用. 域完整性:域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值。域完整性指列的值域的完整性。如数据类型、格式、值域范围、是否允许空值等。 引用完整性

08-Mysql数据库----完整性约束

匿名 (未验证) 提交于 2019-12-02 21:59:42
总结: 1,not null 不能插入空,不设置可空 2,unique 单列唯一     create table department(name char(10) unique); 创建方式一     create table department( unique(name)); 创建方式二     联合唯一: unique(name) unique(id) 两个都不同才可插入 组合唯一:unique(name,id) 有一个不同即可插入 3,主键 primary key = not null unique     作用:唯一标识,查询优化.      复合主键: 有一个不同即可.     注意 : 多列主键有问题 4,auto_increment(自增长) # 步长auto_increment_increment,默认为1 # 起始的偏移量auto_increment_offset, 默认是1 # 设置步长 为会话设置,只在本次连接中有效 set session auto_increment_increment=5; #全局设置步长 都有效。 set global auto_increment_increment=5; # 设置起始偏移量 set global auto_increment_offset=3; 清空表区分delete和truncate的区别: delete

mysql表的完整性约束

こ雲淡風輕ζ 提交于 2019-12-01 23:06:49
阅读目录   概览   not null   unique   primary key   foreign key 概览   为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。   约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 # FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性 NOT NULL 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 mysql> create table t12 (id int not null); Query OK, 0 rows affected (0.02 sec) mysql> select * from t12; Empty set (0.00 sec) mysql> desc t12; +-------+---------+------+-----+---------+-------+ | Field | Type

MySQL的库表详细操作

旧城冷巷雨未停 提交于 2019-11-30 03:18:05
一 库操作 1、创建数据库      1.1 语法       CREATE DATABASE 数据库名 charset utf8;      1.2 数据库命名规则       可以由字母、数字、下划线、@、#、$       区分大小写       唯一性       不能使用关键字如 create select       不能单独使用数字       最长128位 基本上跟python或者js的命名规则一样 2、数据库相关操作     也是一些基本操作,和我们之前说的差不多。 1 查看数据库 show databases; show create database db1; select database(); 2 选择数据库 USE 数据库名 3 删除数据库 DROP DATABASE 数据库名; 4 修改数据库 alter database db1 charset utf8;   关于库的内容,咱们就说这些吧,哈哈,有点少是吧,不是咱们的重点,来看下面的表操作~~~ 二 表操作 1、存储引擎     存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制,关于存储引擎的介绍看我这篇博客: https://www.cnblogs.com/changxin7/p/11525457.html 2、表介绍     表相当于文件,表中的一条记录就相当于文件的一行内容

mysql 完整性、约束

萝らか妹 提交于 2019-11-29 19:21:57
1. 完整性:数据库中数据的可靠性有效性和合理性我们称为数据的完整性,这样才能保证数据合理符合现实生活中的数据体现。 注:数据完整性的设计应该在设计表的时候就进行设计了,而不是等到数据库中已经存在数据才进行设计和实施,这样会导致完整性可能无法实施,因为已存在的数据已经不合理了 2. 约束:为了保证数据的完整性,我们需要使用约束来保证完整性,加约束的过程我们称为实施数据完整性 切记:完整性是设计表的时候就实施了,就是建表的时候还未有数据就要加约束,这样才是正确的设计流程 3. 完整性的分类与对应的实施约束 (1 )域完整性:对列的要求,实施约束方案:数据类型,默认值,非空,外键 (2 )实体完整性:对行的要求,保证行唯一,实施约束方案:主键,唯一,自增长, (3 )引用完整性:对某些列的要求,保证来源有据可寻,实施约束方案:外键 (4 )自定义完整性:用户的自定义要求较随机,实施约束方案:规则,存储过程,触发器 5. 建表的时候添加约束: (1 )主键约束:在字段后面加primary key 即可; (2 )非空约束:在字段后面加not null ; (3 )自增长约束:在int 类型的字段后加auto_increment; (4 )默认值约束:在字段后加“default 默认值”即可 (5 )唯一约束:在字段后加unique 约束 (6 )外键约束:在表最后加foreign key