SQL中的数据冗余的最佳解决方法是什么?
数据应该尽可能少地冗余,这意味着重复数据应该减少到最少。
比如说,一个部门雇员的电话不应该被存储在不同的表中, 因为这里的电话号码是雇员的一个属性。
如果存在过多的冗余数据,这就意味着要占用了更多的物理空间,同时也对数据的维护和一致性检查带来了问题,当这个员工的电话号码变化时,冗余数据会导致对多个表的更新动作,如果有一个表不幸被忽略了,那么就可能导致数据的不一致性。
从一范式转化到二范式根据第二范式的定义,转化为二范式就是消除部分依赖。
考察表1-1,我们可以发现,非主属性部分依赖于主键中的; 非主属性,和都部分依赖于主键中的;表1-1的形式,存在着以下潜在问题:1. 数据冗余:每一个字段都有值重复;2. 更新异常:比如字段的值,比如对值"TPMS"了修改,那么就要一次更新该字段的多个值;3. 插入异常:如果新建了一个Project,名字为TPT, 但是还没有Employee加入,那么将会空缺,而该字段是主键的一部分,因此将无法插入记录;Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(100003, 'TPT', NULL, NULL, NULL, NULL)4. 删除异常:如果一个员工 200003, Kevin 离职了,要将该员工的记录从表中删除,而此时相关的Salary信息 C 也将丢失, 因为再没有别的行纪录下 Salary C的信息。
Delete from sample where EMYNUM = 200003Select distinct SALCATEGORY, SALPACKAGE from SAMPLE因此,我们需要将存在部分依赖关系的主属性和非主属性从满足第一范式的表中分离出来,形成一张新的表,而新表和旧表之间是一对多的关系。
由此,我们得到:CREATE TABLE "PROJECT" ( "PRJNUM" INTEGER NOT NULL, "PRJNAME" VARCHAR(200)) IN "USERSPACE1";ALTER TABLE "PROJECT" ADD PRIMARY KEY ("PRJNUM");Insert into PROJECT(PRJNUM, PRJNAME) values(100001, 'TPMS'), (100002, 'TCT');表1-2表 1-3CREATE TABLE "EMPLOYEE" ( "EMYNUM" INTEGER NOT NULL, "EMYNAME" VARCHAR(200), "SALCATEGORY" CHAR(1), "SALPACKAGE" INTEGER) IN "USERSPACE1";ALTER TABLE "EMPLOYEE" ADD PRIMARY KEY ("EMYNUM");Insert into EMPLOYEE(EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(200001,'Johnson', 'A', 2000), (200002, 'Christine', 'B', 3000), (200003, 'Kevin', 'C',4000), (200004, 'Apple', 'B', 3000);Employee Number Employee Name Salary Category Salary Package200001 Johnson A 2000200002 Christine B 3000200003 Kevin C 4000200004 Apple B 3000CREATE TABLE "PRJ_EMY" ( "PRJNUM" INTEGER NOT NULL, "EMYNUM" INTEGER NOT NULL) IN "USERSPACE1";ALTER TABLE "PRJ_EMY" ADD PRIMARY KEY ("PRJNUM", "EMYNUM");Insert into PRJ_EMY(PRJNUM, EMYNUM) values(100001, 200001), (100001, 200002),(100001, 200003), (100002, 200001), (100002, 200004);同时,我们把表1-1的主键,也就是表1-2和表1-3的各自的主键提取出来,单独形成一张表,来表明表1-2和表1-3之间的关联关系:表 1-4这时候我们仔细观察一下表1-2, 1-3, 1-4, 我们发现插入异常已经不存在了,当我们引入一个新的项目 TPT 的时候,我们只需要向表1-2 中插入一条数据就可以了, 当有新人加入项目 TPT 的时候,我们需要向表1-3, 1-4 中各插入一条数据就可以了。
虽然我们解决了一个大问题,但是仔细观察我们还是发现有问题存在。
回页首从二范式转化到三范式考察表前面生成的三张表,我们发现,表1-3存在传递依赖关系,即:关键字段 --> 非关键字段 -->非关键字段。
而这是不满足三范式的规则的,存在以下的不足:1、 数据冗余:和的值有重复;2、 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况;3、 删除异常:同样的,如果员工 200003 Kevin 离开了公司,会直接导致 Salary C 的信息的丢失。
Delete from EMPLOYEE where EMYNUM = 200003Select distinct SALCATEGORY, SALPACKAGE from EMPLOYEE因此,我们需要继续进行规范化的过程,把表1-3拆开,我们得到:表 1-5和表 1-6这时候如果 200003 Kevin 离开公司,我们只需要从表 1-5 中删除他就可以了, 存在于表1-6中的Salary C信息并不会丢失。
但是我们要注意到除了表 1-5 中存在 Kevin 的信息之外, 表1-4中也存在 Kevin 的信息, 这很容易理解, 因为 Kevin 参与了项目 100001, TPMS, 所以当然也要从中删除。
至此,我们将表1-1经过规范化步骤,得到四张表,满足了三范式的约束要求,数据冗余、更新异常、插入异常和删除异常。
在三范式之上,还存在着更为严格约束的BC范式和四范式,但是这两种形式在商业应用中很少用到,在绝大多数情况下,三范式已经满足了数据库表规范化的要求,有效地解决了数据冗余和维护操作的异常问题。
sql server 双机热备,用于灾难性冗余,确保系统24小时不间断运
一般来说ha都是通过第三方的ha软件来实现的使用普通方法来实现从可用性上肯定达不到24小时不间断,话说回来了,就算使用ha软件做双机热备,也达不到24小时不间断运行,如果跑着服务的那台机器出现宕机,你的服务还是会暂停一会的一般在linux上跑的ha软件比较多windows上的好像有个叫roseha的软件,你可以去查查看
sql 编程用的什么软件?
数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
它具有整体性、共享性。
数据库软件有着整体性和共享性的特点。
数据库技术的发展,已经成为先进信息技术的重要组成部分,是现代计算机信息系统和计算机应用系统的基础和核心。
数据库技术最初产生于20世纪60年代中期,根据数据模型的发展,可以划分为三个阶段:第一代的网状、层次数据库系统;第二代的关系数据库系统;第三代的以面向对象模型为主要特征的数据库系统。
做一个数据库,需要的软件可以是:1、Sybase。
开发公司成立于1984年11月,总部设在美国加州的Emeryville(现为美国加州的Dublin市)。
作为全球最大的独立软件厂商之一,Sybase公司致力于帮助企业等各种机构进行应用、内容及数据的管理和发布。
Sybase的产品和专业技术服务,为企业提供集成化的解决方案和全面的应用开发平台。
2、Informix。
公司在1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。
公司的名称Informix便是取自Information 和Unix的结合。
Informix第一个真正支持SQL语言的关系数据库产品是Informix SE(StandardEngine)。
InformixSE是在当时的微机Unix环境下主要的数据库产品。
它也是第一个被移植到Linux上的商业数据库产品。
3、MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。
在2008年1月16号被Sun公司收购。
而2009年,SUN又被Oracle收购。
对于Mysql的前途,没有任何人抱乐观的态度。
目前MySQL被广泛地应用在Internet上的中小型网站中。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
4、Visual FoxPro。
原名FoxBase,最初是由美国Fox SoVisual FoxProftware公司于1988年推出的数据库产品,在DOS上运行,与xBase系列兼容。
FoxPro是FoxBase的加强版,最高版本曾出过2.6。
之后于1992年,Fox Software公司被Microsoft收购,加以发展,使其可以在Windows上运行,并且更名为 Visual FoxPro。
FoxPro比FoxBASE在功能和性能上又有了很大的改进,主要是引入了窗口、按纽、列表框和文本框等控件,进一步提高了系统的开发能力。
SQL客户端 是哪一个软件啊?
展开全部 如果你是要编程,要用到SQL数据库连接的话就得选择 服务器和客户端工具要不然无法操作数据库如果只是一般的想要使用一些连接了数据库的软件的话,选另外两种都可以客户端工具.即具备连接到SQL SERVER服务器的能力,并且安装有关连接到SQL SERVER服务器的工具,不安装SQL SERVER服务器。
服务器和客户端工具.不仅具备连接到SQL SERVER服务器的能力及安装有关连接到SQL SERVER服务器的工具,还安装SQL SERVER服务器。
仅连接仅具备连接到SQL SERVER服务器的能力,没有连接到SQL SERVER服务器的工具,也不安装SQL SERVER服务器。
这种情况是给一些数据库应用软件做铺垫,使之能连接到数据库。
...
常用的sql客户端软件有哪些?
展开全部 数据库冗余 指的多余的相同数据 举个例子 表 s (学号, 班级,姓名 ) c(课程名, 课程号 ) 表 cc(学号 课程号)表 d(学号 班级 课程名)学生选课关系 ,s表定义学生信息 ,c表定义课程信息 ,cc表定义选课信息表 d则属于数据数据 , 因为表d可以用语句 select 学号 班级 课程名 from s,cc where s.学号=cc.学号 来表示...
什么是数据库中的数据冗余?如何消除数据冗余?
展开全部 学号 姓名 课程名 成绩001 张三 数学 90001 张三 语文 91002 李四 数学 90002 李四 语文 91这样的表称为有数据冗余 我们常常把这样的表分为两个表,如:表1学号 姓名001 张三002 李四表2学号 课程名 成绩001 数学 90001 语文 91002 数学 90002 语文 91这样处理后既可满足数据的第二范式要求,当然还不是最好的。
通过关系模式的范式可以消除数据冗余,基本的数据库应满足第三范式(3NF)。
看看数据库的“范式”内容 你就更好理解了。
...
高粱饴梦