精华内容
下载资源
问答
  • 关系型数据库由哪三部分组成 使用关系数据库 (Using The Relational Database) A relational database is used for electronic data management in computer systems and is based on the relational database model...

    关系型数据库由哪三部分组成

    使用关系数据库 (Using The Relational Database)

    A relational database is used for electronic data management in computer systems and is based on the relational database model. This was proposed in 1970 by Edgar F. Codd first time and is still, despite some criticism, as an established standard for databases.

    关系数据库用于计算机系统中的电子数据管理,并且基于关系数据库模型。 这是由Edgar F. Codd于1970年首次提出的,尽管有一些批评,它仍然是数据库的既定标准。

    The associated database management system is called a relational database management system, or RDBMS (Relational Database Management System). To query and manipulate the data predominantly the database language SQL (Structured Query Language) is used.

    关联的数据库管理系统称为关系数据库管理系统或RDBMS(关系数据库管理系统)。 为了主要查询和操作数据,使用了数据库语言SQL(结构化查询语言)。

    Basis of the concept of relational databases is the relation, in a sense of well-defined mathematical concept. It represents a mathematical description of a table, see database relation. Operations on these routes are determined by the relational algebra. The relational algebra is thus the theoretical basis of SQL.

    从明确定义的数学概念的意义上来说,关系数据库的概念的基础是关系。 它代表表的数学描述,请参见数据库关系。 这些路线上的运算由关系代数决定。 因此,关系代数是SQL的理论基础。

    Despite the math and abstract definition of the database model relational databases to handle relatively simple and flexible. This had great impact on the success of database technology.

    尽管对数据库模型进行了数学和抽象定义,但关系数据库仍然可以相对简单灵活地进行处理。 这对数据库技术的成功产生了重大影响。

    关系数据库–基本概念 (Relational Database – Basic concepts)

    A relational database can be thought of as a collection of tables (the relations), which are stored in records. Each row (tuple) in one table is a record (record). Each tuple is a set of attribute values (attributes = attributes), the columns of the table. The relation schema specifying, in the number and type of attributes for a relation. The picture illustrates the relation R with attributes A1 to An in the columns.

    关系数据库可以认为是表(关系)的集合,这些表存储在记录中。 一个表中的每一行(元组)都是一条记录(记录)。 每个元组是一组属性值(属性=属性),即表的列。 关系模式,用于指定关系的属性的数量和类型。 该图在列中说明了具有属性A1到An的关系R。

    For example, one book at a library by the record (book-id, author, publisher, publishing year, title, date of recording will be described). A record must be clearly identifiable. This takes about one or more keys (English Key). In this case book contains the key ID. A key must never change. It relates to the record and not on the position in the table.

    例如,将按记录记录图书馆的一本书(书号,作者,出版者,出版年份,书名,记录日期)。 记录必须清晰可辨。 这大约需要一个或多个键(英文键)。 在这种情况下,书包含密钥ID。 钥匙永远不能改变。 它与记录有关,而不与表中的位置有关。

    表之间的关系 (Relations between tables)

    Furthermore, links are used to express the relationships between tables. A library database could therefore be implemented as follows:

    此外,链接用于表示表之间的关系。 因此,可以如下实现库数据库:

    Table books, which contains one row for each book:

    表格书籍,每本书包含一行:

    • Each line consists of the columns of the table (attribute): book ID, author, publisher, publishing year, title, date of recording.

      每行包括表格的列(属性):书籍ID,作者,出版者,出版年份,书名,记录日期。
    • The key is the book ID, because it marks any book unmistakably.

      密钥是书籍ID,因为它可以清楚地标记任何书籍。

    The entry (10.3) would be called so that the user has with the ID 10 (“Hans bookworms’) the book with the ID3 (“My life with Asterix”). The same user also has the book “Borrowed Printing Made Easy”, which is evidenced by the table entry (10, 2). The key one here takes the attribute set (user-ID, book ID). At the same time connects the user ID each entry in the table Item out with an entry in the table users, and the book ID Item out of each entry with an entry of the table combines books. Therefore, these attributes mean in this context, foreign key (English foreign key).

    条目(10.3)将会被调用,以便用户拥有ID 10(“汉书虫”)和ID3(“ Asterix我的生活”)的书。 同一用户还拥有一本书“轻松进行借阅印刷”,这可以通过表格条目(10,2)证明。 这里的关键是采用属性集(用户ID,书ID)。 同时,将表ID中的每个条目的用户ID与表用户中的一个条目连接在一起,并将表中每个条目的用户ID条目与该表中的条目连接在一起。 因此,这些属性在此上下文中表示外键(英文外键)。

    划界 (Demarcation)

    In addition to the relational database model, there are several alternative approaches, which allow data to manage in other structures. These concepts often have only a minor importance or not yet enforced. Nevertheless, they provide an easier access for certain applications of the data to be managed.

    除了关系数据库模型外,还有几种替代方法,这些方法允许在其他结构中管理数据。 这些概念通常只具有次要的重要性,或者尚未被实施。 但是,它们为要管理的数据的某些应用程序提供了更容易的访问。

    较旧的方法 (Older approaches)

    In the 60s and 70s for operational data processing hierarchical database systems and network database systems were used. These are the data or table structure defined in the draft stage and may not vary with the query. They come in special cases, also still in use today.

    在60年代和70年代,用于操作数据处理的是分层数据库系统和网络数据库系统。 这些是在草稿阶段定义的数据或表结构,可能不会随查询而变化。 它们以特殊情况出现,今天仍在使用。

    面向对象的数据库 (Object oriented databases)

    With the advent of object-oriented programming languages object databases have been increasingly offered. This allows objects from OO languages like Java are held directly in the database – a mapping of objects to the relational table structure, the object-relational mapping is then no longer necessary. This approach has advantages over the relational design if you want to store complex data objects that can be mapped only heavy on the flat relational table structures.

    随着面向对象编程语言的出现,越来越多地提供了对象数据库。 这样就可以将诸如Java之类的OO语言的对象直接保存在数据库中-将对象映射到关系表结构,这样就不再需要对象-关系映射。 如果要存储只能在平面关系表结构上重映射的复杂数据对象,则此方法相对于关系设计具有优势。

    Object databases have, however, still disadvantages to relational databases with the processing of large amounts of data. This is caused for example by access paths to objects on multiple levels (example, inheritance and association). This results in write operations to the lock management at an exponential complexity and thus leads to poor performance. The performance issues were addressed in the object-relational databases in which only the constructs of object-oriented databases with lower complexity (eg n * log (n)) were taken.

    但是,对象数据库在处理大量数据时仍比关系数据库不利。 例如,这是由对多个级别的对象的访问路径(例如,继承和关联)引起的。 这导致对锁管理的写操作呈指数复杂性,从而导致性能下降。 在对象关系数据库中解决了性能问题,其中仅采用具有较低复杂性(例如n * log(n))的面向对象数据库的结构。

    对象关系数据库 (Object-relational databases)

    Some providers add their relational databases, object-oriented properties and then call these object-databases. However, these are not provided for the direct imaging of objects in the programming language – they are just using the concept of inheritance to simplify the definition and query of tables with similar field structures and thus their use. The SQL-99 standard was extended to object-language elements.

    一些提供程序添加他们的关系数据库,面向对象的属性,然后调用这些对象数据库。 但是,并没有为使用编程语言对对象进行直接成像提供这些功能-它们只是使用继承的概念来简化具有相似字段结构的表的定义和查询,从而简化了它们的使用。 SQL-99标准已扩展到对象语言元素。

    半结构化数据库 (Semi-structured databases)

    New concepts are the semi-structured databases. They differ from the traditional database model is that they do not have a fixed predetermined scheme. The database is hierarchically structured as a tree, and each database unit (English Entity) of the same type can have different sets of attributes.

    新概念是半结构化数据库。 它们与传统数据库模型的不同之处在于它们没有固定的预定方案。 数据库按层次结构构建为树,并且同一类型的每个数据库单元(英语实体)可以具有不同的属性集。

    Typical representative of this type are XML databases that manage the data as XML fragments. The XML data is hierarchically organized here and can contain any structure as long as they are well formed according to XML definition. The data can be queried using XQuery or XPath. Manipulation are now used proprietary language extensions. Disadvantage of current XML databases is in comparison to relational systems lower performance.

    这种类型的典型代表是将数据作为XML片段管理的XML数据库。 XML数据在这里是按层次结构组织的,并且可以包含任何结构,只要它们根据XML定义格式正确即可。 可以使用XQuery或XPath查询数据。 现在,操纵已使用专有语言扩展。 当前XML数据库的缺点是与关系系统相比性能较低。

    Semi-structured database can be implemented via extensions or server programming with relational DB where the relational model is used but no more.

    半结构化数据库可以通过关系数据库的扩展或服务器编程来实现,而关系数据库仅使用关系模型。

    Continued…

    继续…

    翻译自: https://www.eukhost.com/blog/webhosting/relational-database-part-1/

    关系型数据库由哪三部分组成

    展开全文
  • 关系数据库与非关系数据库的区别

    万次阅读 2018-11-01 20:50:59
    当前主流的关系数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非关系数据库有 NoSql、Cloudant。 nosql和关系数据库比较? 优点: 1)成本:nosql数据库简单易部署,基本都是开源...

    当前主流的关系型数据库Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

    非关系型数据库有 NoSql、Cloudant。

    nosql和关系型数据库比较?
    优点:
    1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
    2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
    3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
    4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
    缺点:
    1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
    2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

    3)不提供关系型数据库对事物的处理。


    非关系型数据库的优势:1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

    关系型数据库的优势:1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。




    关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。

     

    关系型数据库的优势:

    1. 保持数据的一致性(事务处理)

    2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)

    3. 可以进行Join等复杂查询

    其中能够保持数据的一致性是关系型数据库的最大优势。

     

    关系型数据库的不足:

    不擅长的处理

    1. 大量数据的写入处理

    2. 为有数据更新的表做索引或表结构(schema)变更

    3. 字段不固定时应用

    4. 对简单查询需要快速返回结果的处理

    --大量数据的写入处理

    读写集中在一个数据库上让数据库不堪重负,大部分网站已使用主从复制技术实现读写分离,以提高读写性能和读库的可扩展性。

    所以在进行大量数据操作时,会使用数据库主从模式。数据的写入由主数据库负责,数据的读入由从数据库负责,可以比较简单地通过增加从数据库来实现规模化,但是数据的写入却完全没有简单的方法来解决规模化问题。

    第一,要想将数据的写入规模化,可以考虑把主数据库从一台增加到两台,作为互相关联复制的二元主数据库使用,确实这样可以把每台主数据库的负荷减少一半,但是更新处理会发生冲突,可能会造成数据的不一致,为了避免这样的问题,需要把对每个表的请求分别分配给合适的主数据库来处理。

    第二,可以考虑把数据库分割开来,分别放在不同的数据库服务器上,比如将不同的表放在不同的数据库服务器上,数据库分割可以减少每台数据库服务器上的数据量,以便减少硬盘IO的输入、输出处理,实现内存上的高速处理。但是由于分别存储字不同服务器上的表之间无法进行Join处理,数据库分割的时候就需要预先考虑这些问题,数据库分割之后,如果一定要进行Join处理,就必须要在程序中进行关联,这是非常困难的。

     

     

    --为有数据更新的表做索引或表结构变更

    在使用关系型数据库时,为了加快查询速度需要创建索引,为了增加必要的字段就一定要改变表结构,为了进行这些处理,需要对表进行共享锁定,这期间数据变更、更新、插入、删除等都是无法进行的。如果需要进行一些耗时操作,例如为数据量比较大的表创建索引或是变更其表结构,就需要特别注意,长时间内数据可能无法进行更新。

     

    --字段不固定时的应用

    如果字段不固定,利用关系型数据库也是比较困难的,有人会说,需要的时候加个字段就可以了,这样的方法也不是不可以,但在实际运用中每次都进行反复的表结构变更是非常痛苦的。你也可以预先设定大量的预备字段,但这样的话,时间一长很容易弄不清除字段和数据的对应状态,即哪个字段保存有哪些数据。

    --对简单查询需要快速返回结果的处理  (这里的“简单”指的是没有复杂的查询条件)

    这一点称不上是缺点,但不管怎样,关系型数据库并不擅长对简单的查询快速返回结果,因为关系型数据库是使用专门的sql语言进行数据读取的,它需要对sql与越南进行解析,同时还有对表的锁定和解锁等这样的额外开销,这里并不是说关系型数据库的速度太慢,而只是想告诉大家若希望对简单查询进行高速处理,则没有必要非使用关系型数据库不可。

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

    NoSQL数据库

    关系型数据库应用广泛,能进行事务处理和表连接等复杂查询。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。

    优点:

     易于数据的分散

    各个数据之间存在关联是关系型数据库得名的主要原因,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散,这也是关系型数据库并不擅长大数据量的写入处理的原因。相反NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器上的数据量,即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。

     

    典型的NoSQL数据库

    临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)

    一、 键值存储

    它的数据是以键值的形式存储的,虽然它的速度非常快,但基本上只能通过键的完全一致查询获取数据,根据数据的保存方式可以分为临时性、永久性和两者兼具 三种。

    (1)临时性

          所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止时,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢失。总结来说:

          。在内存中保存数据

          。可以进行非常快速的保存和读取处理

          。数据有可能丢失

     (2)永久性

           所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。总结来说:

           。在硬盘上保存数据

           。可以进行非常快速的保存和读取处理(但无法与memcached相比)

           。数据不会丢失

    (3) 两者兼备

           Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来说:

           。同时在内存和硬盘上保存数据

           。可以进行非常快速的保存和读取处理

           。保存在硬盘上的数据不会消失(可以恢复)

           。适合于处理数组类型的数据

         

    二、面向文档的数据库

       MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。

       (1)不定义表结构

         即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。

       (2)可以使用复杂的查询条件 

         跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但初次以外的其他处理基本上都能实现。

    三、 面向列的数据库

       Cassandra、HBae、HyperTable属于这种类型,由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引入注目。

       普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

    面向列的数据库具有搞扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,故应用起来十分困难。

     

    总结:关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。




    展开全文
  • 关系数据库系统(数据库原理)

    千次阅读 多人点赞 2019-06-12 22:15:51
    关系数据库系统(数据库原理) 目录 一、关系数据结构 二、关系的完整性 三、关系运算 四、关系的规范化 一、关系数据结构 1、关系的定义和性质 (1)、 关系的数学定义: 域:一组有相同数据类型的值得...

    关系数据库系统(数据库原理)

    目录

    一、关系数据结构
    二、关系的完整性
    三、关系运算
    四、关系的规范化

    一、关系数据结构

    1、关系的定义和性质
    (1)、 关系的数学定义:

    • 域: 一组有相同数据类型的值得集合
    • 笛卡尔积: 设任意的N个域D1,D2,…,Dn。定义D1,D2,…,Dn的笛卡尔积为:D1*D2*****Dn={(d1,d2,…,dn)|di属于Di,i=1,2,…,n}。例如(D1的取值类型都为动物,D2的取值类型都为菜食物):D1={猫,狗,猪},D2={鱼,骨头,白菜},则D1乘D2={(猫,鱼),(猫,骨头),(猫,白菜),(狗,鱼),(狗,骨头),(狗,白菜),(猪,鱼),(猪,骨头),(猪,白菜)}
    • 将笛卡尔积转化为二维表

    在这里插入图片描述

    • 抽取每种动物喜欢的食物(笛卡尔积的子集)
      在这里插入图片描述

    • 关系: D1******Dn中有关系的行形成的一个子集称为D1******Dn的一个关系,用R(D1,D2…Dn)表示,R表示关系名,n表示关系的元或目

    (2)、关系的性质:

    1. 同一列的数据类型必须一致
    2. 同一关系中,不同列可以有相同的数据类型,但列名必须不一样
    3. 同一关系中,任意两行不能重复,且元组(行)的排行不分先后顺序
    4. 同一关系中,列的排列部分先后顺序
    5. 关系中属性不可再分,满足原子性

    2、关系数据库的基本概念:
    (1)关系模式

    • 在惯性型数据库中,关系模式是型,关系是值,关系模式是对关系的描述
    • 关系模式的表示:R(U,D,dom,F),R表示关系名;U是组成该关系的属性名集合;D是属性组U中属性来自的域;dom是属性向域的映像关系;F是属性间的数据依赖关系集合
    • 简记:R(U)或者R(A1,A2,A3…An),例如:学生情况(姓名,班级,学号,身份证号等)

    (2)关系数据库 采用关系模式的数据库

    3、关系的完整性: 保证行不重复(唯一)
    (1)实体完整性约束

    • 主键约束(primary key):非空且唯一
    • 唯一键约束(unique):唯一

    (2)引用完整性约束:

    • 存在两个关系(表)R和S,F是一个属性或者属性集合;F属于R但不是R的主键,同时F属于S并且F是S的主键,则称F是基本关系R的外码,R为外键表,S为主键表
    • 外键约束(foreign key):表与表之间建立联系

    (3)域完整性约束: 用户定义的完整性规则

    • 由用户根据实际情况对数据库中的数据内容进行规定,对列的约束
    • 检查约束(check):添加范围
    • 数据类型约束(int、char等)
    • 默认约束(default)
    • 非空约束(not null)

    3、关系运算: 关系代数是以关系为运算对象的一组高级运算的集合

    (1)传统的集合运算: 并、交、差、笛卡尔积

    • 笛卡尔积: 两张表R和S也就是关系 ,笛卡尔积R*S就是R表的字段加上S表的字段,如图:
      举例:
      在这里插入图片描述

    • 并: 关系R和S具有相同的关系模式(属性相同,域相同)
      公式:
      在这里插入图片描述
      举例:
      在这里插入图片描述

    • 交: R和S具有相同的关系模式,R和S的交是属于集合R有属于集合S的元素组成的集合

    • 差: R和S具有相同的关系模式,R和S的差是有属于关系R但不属于关系S的元素构成的集合
      表达式:
      在这里插入图片描述
      举例:
      在这里插入图片描述
      (2)专门的关系运算: 投影、选择、连接、除法

    • 投影:(对关系进行垂直分割) 关系R上的投影是R上选择出若干个属性列组成新的关系(从表中选择列)
      表达式:
      在这里插入图片描述
      将a1和a3进行投影,去掉重复的:
      在这里插入图片描述

    • 选择(对关系进行水平分割): 挑选满足条件的行
      表达式:
      在这里插入图片描述
      举例: 选择A2值为a或b的元素
      在这里插入图片描述在这里插入图片描述

    • 连接: 两个关系的笛卡尔积中选取满足条件的元组(两个关系先做笛卡尔积,在用条件筛选出满足条件的行)
      有等值连接和自然连接(去掉了重复的等值连接)两种连接方式
      连接的表达式:
      在这里插入图片描述
      举例:将R和S进行笛卡尔积运算,再取B<=H的行
      在这里插入图片描述
      自然连接: 两张表中属性名相同的值也相同的进行组合构成一个新的关系
      表达式:
      在这里插入图片描述
      举例:
      在这里插入图片描述

    • 除法(笛卡尔积的逆运算):

    象集: 给定关系R(A,B),A,B为属性组。表示A属性上a在B上的分量就是象集
    例如:
    | A|B |
    | a1|b1 |
    | a2|b2|
    | a2|b3 |
    a1对应的象集为(b1)
    a2对应的象集为:(b2,b3)
    步骤:R/S
    stop1:找到两个关系中属性相同的列
    step2:R/S就是相同的列中属于R但不属于S的列
    step3:找到R中列的元素所对应的象集,和S在和R相同列的投影
    step4:象集包含S中得到的投影的元素就是除法的结果

    四、关系的规范化

    1、数据依赖: 函数依赖 、多值依赖、连接依赖
    (1)、函数依赖: 关系模式中各个属性之间的一种依赖关系

    • 函数依赖定义: 简单点说就是,关系R(X,Y),如果指导属性X的值就能得到属性Y的值,就能说Y函数依赖于X

    (2)、几种特定的函数依赖:

    • 平凡和非平方函数依赖: 关系模式R(X,Y),如果 X—>Y,Y是X的子集,则称为平凡函数依赖;如果X—>Y,Y不是X的子集,则称为非平凡函数依赖。例如:学号,课程号—>成绩为非平凡函数依赖
    • 完全函数依赖和部分函数依赖: 关系模式R(X,Y),如果X—>Y,并且X的任意一个真子集Z都不满足Z—>Y,则Y完全函数依赖 X;如果X—>Y,但对于X的某一个真子集Z,有Z—>Y满足,则称Y部分依赖于X。例如:成绩表(学号,课程号,成绩),学号 ,课程号为主键,学号和课程号共同决定成绩,但是学号和课程号分开不能决定成绩,所以成绩完全函数 依赖学号和课程号
    • 传递函数依赖: 关系模式R(X,Y),X—>Y,Y—>X(不成立),有Y—>Z,则称X—>Z称为传递函数依赖。例如:学生关系(学号,所在系,系主任),学号——>所在系,所在系——>系主任,学号——>系主任

    (3)、码的函数依赖表示:

    • 候选码: 设K为关系模式R(U)中的一个属性或属性集合,若K——>U,则K称为R的一个候选码
    • 主码: 选定R中一个候选码作为主码

    2、关系规范化的目的:

    1. 数据冗余:数据库中重复存放数据的情况。造成浪费空间,修改数据时会发生数据不一致情况
    2. 更新异常:存在数据冗余,更新数据时代价会增高
    3. 插入数据:信息插不进去
    4. 删除异常:不该删除的数据不得不删除

    3、关系规范化的过程:

    (1)、第一范式: 目标是确保每列的原子性(即不可再分的最小数据单元)

    • 关系模式的属性不可再分解
    • 缺点:不能排除数据冗余和异常情况

    (2)、第二范式: 要求每个表只描述一个实体的属性

    • 主属性: 包含在任何候选码中的属性
    • 非主属性: 不包含在任何候选码中的属性
    • **定义:**满足第一范式的条件下,且它的每一个 非主属性 都完全函数依赖于码(候选码)
    • 例如:学生关系(学号,姓名,性别,课程号,学分),其中学号和课程号的组合为主码,姓名、性别、学分为非主属性

    (3)、第三范式: 要求实体各属性之间不能具有直接的依赖关系

    • 满足第二范式,且没有一个非主属性传递函数依赖于码

    (4)、BC范式:

    • 定义:对于任何非平凡函数依赖X——>Y,X均包含码
    • 所有非主属性完全函数依赖于每一个候选码
    • 所有主属性完全函数依赖于每个不包含它的候选码
    • 没有任何属性完全函数依赖于非码的任何一组属性
    展开全文
  • 关系数据库系列文章之到底什么是关系(一)

    千次阅读 多人点赞 2018-08-05 02:28:45
    在语言X中如何实现Y,像这种具体的只是(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。... 作为程序员,在日常的开发中,我们避免不了的就要接触数据库这个概念,而关系...

    为了不迷路,请关注我的公众号 “旋转柚子”,我会分享更多自创文章,希望与您一起学习一起进步。正文开始:

    在语言X中如何实现Y,像这种具体的只是(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。世界瞬息万变,这意味着限定了应用范围的具体知识将慢慢失去其价值。因此,我们不仅要学习具体的知识,更要有意识的去学习那些应用范围广泛的抽象的概念。——摘自《代码之髓》 【日】西尾泰和

             作为程序员,在日常的开发中,我们避免不了的就要接触数据库这个概念,而关系数据库以及其对应的SQL也是我们经常接触的概念。但我们也许都不曾认真的去探索它们名称背后的意义所在,而数据库相关的计算机知识发展迅速, 所以掌握基本的理论基础,便可以使得我们可以在瞬息万变的技术更迭中触类旁通。为了达到上述的目的,我创作了关于关系数据库的系列文章,这是该系列文章的第一篇,探讨关系数据库中的所谓的“关系”。

            本文也写在了个人博客关系数据库系列文章之到底什么是关系(一)中,谢谢支持。

            我们学习数据库,首先要知道数据库是什么,根据相关的资料显示,数据库的定义如下:  

    数据库是长期存储在计算机内有组织、大量、共享的数据集合。它可以供各种用户共享,具有较小的冗余度和较高的数据独立性。
    概括的讲,数据库具有永久存储,有组织和可共享三个基本特点。

            更加通俗的说,数据库就是一个使用特定数据结构(如:B+ 树)长期存储在计算机上的一个数据的集合。

            概念如此,浅显易懂。但是我们平时跟数据库分类,所谓的关系数据库,非关系数据库等,这些依据又是从何而来的呢?首先,我们要知道数据库的发展是沿着数据模型的主线进行推进的。

            什么是数据模型,我们要着重介绍一下。

            模型,对我们来说并不陌生, 一张地图,一架航模飞机都是具体的模型,一眼看去就是使人们联想到真实生活中的事物。所以,模型就是对现实世界中某个对象特征的模拟和抽象。而数据模型也是一种模型 ,它是对现实世界数据特征的抽象。也就是说,数据模型是用来描述数据、组织数据和对数据进行操作的。生活中处处都是数据,比如说,学校中的每个教室和学生每个人就是一个独立的数据,这个数据包含各种属性,如:姓名,身高,年级等等,而某个老师教哪些学生,哪些班级,哪些学生与哪些学生又是同学等等,这些庞大的数据以及数据关系充斥在我们的现实生活中,我们习以为常并不觉得难懂,但如果将这些数据存入计算机中,该如何存入呢,当然会有很多方式,但是我们首先要做的就是将这些数据转化成计算机能处理的数据,这一步叫做数字化,然后将现实生活中的概念用数据模型进行抽象、表示、处理,通俗的讲,数据模型就是现实世界的模拟。可以这样理解,我们存入计算机的数据就是单纯的数据,如:(张三、170、2)就是一条数据,而我们要对这些数据进行表示操作的时候,就要通过数据模型还原成现实世界进行操作,如:姓名:张三,身高:170cm, 二年级,当我们修改年级为0的时候就是违法操作,因为现实中没有0年级。(这里只是举个例子)

            现有的所有数据库都是基于某种数据模型的。数据模型是数据库系统的核心和基础。

            人们把数据模型分为两类:第一类是概念模型,第二类是逻辑模型和物理模型。概念模型主要是按照用户的观点对数据和信息建模主要用于数据库设计。第二类中逻辑模型主要包括,层次模型、网状模型、关系模型、面向对象数据模型等,主要用于数据库管理系统的实现。而第二类中的物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,或在磁盘上的存储方式和存取方法,是面向计算机系统的。

    注:数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。下文统称为DBMS

            到这里,我们可以总结一下了:数据库就是一个数据集合,它存储在硬盘上(也可能是内存中),具体怎么存,怎么读取使用物理模型进行抽象,它面向的是计算机系统。这些最底层的数据最终是要被数据库管理系统操作的,而数据库管理系统中存在某种数据模型对所有底层的数据进行建模,如果使用关系模型,该数据库即是关系型数据库。

            这里跳过层次模型和网状模型的介绍,因为这两种模型已经逐渐被市场淘汰(个人了解),简单说下其优缺点吧,层次数据库就像是一个二叉树,所以每个数据都有从根节点出发而来的路径信息,所以检索性能高,但是由于是一对多的关系并不能满足现实世界中多对多的情况,且插入和删除操作的限制比较多,查询必须通过双亲节点,程序的编写也比较复杂。而网状数据库虽然可以直接描述现实世界,但是结构比较复杂,应用程序编写麻烦。

            进入现在应用广泛的关系数据库,那我们就要先了解关系模型,因为采用关系模型作为数据结构的数据库被称为关系数据库。  

            什么是关系模型?这里简单勾画一下关系模型,从用户的观点看,关系模型是由一组关系组成的。而每个关系的数据结构是一张规范化的二维表。如下,以一个表为例介绍几个概念:

       学生登记表:

    关系:一个关系对应通常说的一张表,如上图这张表。

    元组:表中的一行即为一个元组。

    属性:表中的一列即为一个属性,给每一个属性起一个名称即属性名,如上图对应着四个属性(学号,姓名,年龄,性别)

    码:也称为码键。表中的某个属性组,它可以唯一确定一个元组,如上图中的属性学号可以 唯一确定一个学生,也就成为了本关系的码。

    关系模式:对应关系的描述,一般表示为 关系名(属性1、属性2),如上的关系可以描述为:学生(学号、姓名、年龄、性别)

            这是关系模型中一些基本的概念, 除此之外,关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些条件中最基本的一条就是,关系元组中的每一个属性值必须是一个不可分的数据项,也就是说,不允许表中还有表。

    例如,上图表中,新增一列“成绩”,在成绩中又划分,数学、C语言等,这种情况就不满足规范化。

            到此,你可能会豁然开朗,原来一个现实生活中的二维表,就是一个关系。

            这只是我们从定义的概念中“推测”而来的“大致”的一个总结,还不能到达到知其所以然的目的。那么我们就要重新回到数据模型的角度来看待问题,首先要知道的是,数据模型有三大要素组成:数据结构、数据操作、数据的完整性约束条件三部分组成。所以我们要去了解一个数据模型,就要从这三方面着手,而了解一个数据库同样如此。所以我们有必要知道,关系模型对应的上述三要素,下面进行详细的阐述:

            数据结构:

            从上面勾画的概念中我们大致知道,关系模型的数据结构就是——关系,这种关系在用户看来就是一张扁平的二维表。且这种结构是严格建立在数学概念基础上的,要想具体了解,我们首先要知道如下几个小概念:

    1、域:域是一组具有相同数据类型值的集合。例如:整数、自然数、长度小于25字节的字符串集合、{0,1}、{男、女},这些都可以是域。

    2、笛卡尔积:笛卡尔积是域上的一种集合运算,给定一组域,D1、D2...Dn,允许其中某些域是相同的,则D1、D2...Dn的笛卡尔积:D1×D2×...×Dn={(d1,d2,...,dn) | di∈Di,i=1,2,...,n},这是一个简单的集合表达式,即有多少个域进行运算,其结果集合中的每个元组就有多少个列,而第i列的取值范围属于域Di,举个例子:现在有域 A{1,2,3},B{7,8},这两个域的笛卡尔积可以表示为一个大集合:{(1,7),(1,8),(2,7),(2,8),(3,7),(3,8)},结果集合中共有6个元素(也可以称为元组),而元素的个数可以通过域元素数量相乘得到,即:3*2=6。现在,我们可以这样总结笛卡尔积:笛卡尔积描述的是两个或多个集合相互“关联”成一个最终的集合,而这个最终的集合将包含“关联”之后所有的“可能性”。

            我们现在将上述笛卡尔积概念中描述的“关联”运用到现实世界中,还是举学校的例子,将所有的学生姓名当成一个域,所有的年龄也列出来一个域,年级同样如此。现在就有三个域分别表示学生姓名,年龄,年级,即A{小明,毛羽,小芳},B{8,9},C{一年级,二年级},这三个域本来独立存在且不相干的三个域,但是由于它们在某种意义上都对“学生”这个实体进行了描述,所以我们把这三个域进行笛卡尔积处理,也就是说把这三个域“关联”起来形成一种“关系”,这种关系是我们根据数学概念计算出来的。

    计算结果为:{(小明,8,一年级),(小明,9,一年级),(小明,8,二年级),(小明,9,二年级),(毛羽,8,一年级),(毛羽,9,一年级),(毛羽,8,二年级),(毛羽,9,二年级),(小芳,8,一年级),(小芳,8,二年级),(小芳,9,一年级),(小芳,9,二年级)}

    将上述结果集合加上每个列的属性名称形成一张二维表: 

    可以说,这张表就是我们根据三个自定义属性关联而成的一张“关系”表。但是这个关系结果是包含了所有的可能性的关系(所有可能往往是没有意义的,如上述例子中小芳只可能在一个年级中。所以笛卡尔积的真子集才有实际含义),而关系数据库中的结果正是这种所有可能性结果的子集。现在我们可以对关系模型中的“关系”进行定义:

    D1×D2×...×Dn的子集叫做在域D1,D2...Dn上的关系,表示为R(D1,D2,...,Dn)这里的R表示关系的名字。关系是笛卡尔积的有限子集,所以关系也是一张二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性。

    由于组成笛卡尔积的域不满足交换律,所以按照数学定义,(d1,d2,...,dn)≠(d2,d1,...,dn)。当关系作为关系数据模型的数据结构时,需要加上如下的限定和扩充:

    1、无限关系在数据库系统中是无意义的,所以,限定关系数据模型中的关系必须是有限集合。

    2、通过为关系的每个列附加一个属性名的方法取消关系属性的有序性,即(d1,d2,...,dn)=(d2,d1,...,dn)

    所以,基本关系具有如下6条性质:

    注:关系有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。其他的内容我们会在之后的文章进行详细的介绍。

    1、列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。联想:我们在建立数据库字段时要指定其字段类型,如int,varchar等。

    2、不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名,如上面的例子中我们可以给出属性名:姓名={小明,毛羽,小芳}。年龄={8,9}。

    3、列的顺序无所谓,即列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际关系数据库产品中增加新属性时,永远是插在最后一列。

    4、行的顺序无所谓,即行的次序可以任意交换。

    5、任意两个元组的候选码不能取相同的值。

    注:若关系中的某一属性组的值能唯一的标识一个元组,而其子集不能,则称为该属性组为候选码。

    6、分量必须取原子值,即每一个分量必须都必须是不可分的数据项。

    注:分量,元素中的每一个值叫做一个分量,如上例中,小芳就是一个分量。

            另,我们在上文中提到过:关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些条件中最基本的一条就是,关系元组中的每一个属性值必须是一个不可分的数据项。而规范化的关系成为范式(Normal Form NF),关于范式的概念将在后续的文章中详细介绍。

            至此,关系数据模型中的数据结构介绍完毕。

            但是就像上文所说,了解关系数据库要从其三要素(数据结构、数据操作、数据的完整性约束)着手,我们在了解了关系数据库的数据结构之后,对其概念有了深刻的认知,接下来的文章将结合SQL介绍关系数据库中的数据操作,以及数据的完整性约束,最终在充足的理论基础上再去了解具体的关系数据库(如:MySQL、Oracle、db2等)将更加简单与深刻。

            本文部分内容参考《数据库系统概论》,且由于博主水平有限,文章中出现的错误或对关系数据库理解不当之处还望不吝赐教。还有,转载要注明出处哦。

           为了不迷路,请关注我的公众号 “旋转柚子”,我会分享更多自创文章,希望与您一起学习一起进步。

            本文也写在了个人博客关系数据库系列文章之到底什么是关系(一)中,谢谢支持。

     

     

    展开全文
  • 关系数据库与对象数据库

    千次阅读 2019-08-12 16:01:38
    关系数据库 关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。...
  • 关系模式,关系,关系数据库

    千次阅读 2020-03-11 22:13:06
    关系模式是型、关系是值,关系模型是对关系的描述(元组集合的结构、完整性约束条件)是静态的、稳定的;关系是关系模式在吗某一时刻的状态或内容,是动态的、随时间...关系数据库是在给定应用领域中所有关系的集合 ...
  • 关系数据库设计理论

    千次阅读 2018-07-11 18:32:27
    关系数据库设计理论 设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式中包括哪些属性 ...
  • 关系型数据库与非关系数据库区别

    千次阅读 2019-02-22 10:57:57
    关系数据库和非关系型数据的比较 一、关系数据库 关系数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用...
  • 数据库之关系数据库的关系运算

    千次阅读 多人点赞 2020-03-25 11:59:13
    我们学习关系运算的机理,对我们理解数据库查询操作非常重要 所以我们进行关系操作时很大程度上需要明白关系操作以及关系之间的逻辑 在我们进行数据库查询操作时,如何规范的使用数据库语言,如何进行选择时能够消除...
  • 文章目录0.思维导图1. 关系(1)域(Domain)(2)...关系数据库 0.思维导图 1. 关系 什么是关系? 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,...
  • 关系数据库基础理论

    千次阅读 2018-08-06 11:02:06
    mysql系列之一关系数据库基础理论 正是数据库管理的需要催生了数据库管理系统DBMS,而关系型数据库管理系统为RDBMS 常见的数据模型有三种: - 层次模型 - 网状模型 - 关系模型 一、关系数据库的产生 在...
  • 关系数据库关系数据模型关系是一个数学概念。 当把关系的概念引入到数据库系统作为数据模型的数据结构时,既有所限定和也有所扩充。 关系的数学定义例: 课程={离散,C语言…..},学生={张三,李四…..} 笛卡儿积...
  • 也许有人迷惑关系数据库和非关系数据库区别,其实非关系数据库就是Nosql,所谓Nosql,就是(Not Only SQL),这个问题等价于关系数据库和Nosql区别。 Nosql简介 Redis,Memchche,MongoDb的区别 1. 本质:...
  • 数据库-关系数据库基本概念

    千次阅读 2019-04-10 21:01:06
    1.关系数据库及形式化定义 I、关系 关系模型的数据结构非常简单,只包含单一的数据结构--关系(表)。在用户看来关系就是一张扁平的二维表。 关系模型的数据结构虽然简单但是能够表达丰富的语义,描述出现实...
  • 文章目录关系数据库关系数据库简介关系数据结构及形式化定义关系操作关系模型的完整性关系代数 关系数据库 关系数据库简介 美国????IBM公司的E.F.Codd 1970年提出关系数据模型E.F.Codd, “A Relational Model of ...
  • 数据库原理之关系数据库关系运算

    万次阅读 多人点赞 2018-12-06 10:10:31
    关系数据库关系运算 选择 投影 链接 除运算 选择运算 选择运算是从关系R中选取使逻辑表达式F为 真的元组,是从行的角度进行的运算 投影运算 投影操作主要是从列的角度进行运算,但投影之后...
  • 关系数据库——关系的完整性约束

    千次阅读 2019-04-09 08:38:38
    介绍关系数据库完整性约束——实体完整性,参照完整性、用户自定义完整性
  • 分布式系统(distributed system)  由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度...传统关系型数
  • 关系数据库规范化理论

    千次阅读 2018-03-01 22:54:50
    关系数据库规范化理论一个关系数据库由一组关系模式组成,一个关系由一组属性名组成,关系数据库设计就是如何把已给定的相互关联的一组属性名分组,并把每一组属性名组织成关系的问题。1、关系规范化的作用所谓规范...
  • 数据库 - 关系数据库标准语言SQL

    千次阅读 2015-05-05 09:57:12
    SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言SQL特点1.综合统一 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于...
  • 关系数据库标准语言SQL

    千次阅读 2017-12-07 23:55:17
    结构化查询语言(SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据语言。其功能不仅是查询,还包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。 1、SQL的...
  • 关系数据库的使用已经有相当长的时间了。它们变得流行起来托了管理系统的福,关系模型被实现得相当的好,并且被证明是操作数据的好方法(特别是事务性强的应用)。 在这篇DigitalOcean文章中,我们将尝试理解一些...
  • 关系数据库的查询处理

    千次阅读 2018-07-12 12:47:05
    查询处理是关系数据库管理系统执行查询语句的过程,其任务是把用户提交给关系数据库管理系统的查询语句转为高效的查询执行计划。 一、查询处理步骤 1. 查询分析 对查询语句进行扫描、词法分析和语法分析。从查询...
  • 很多情况下,用户会将实时数据库与关系数据库混为一谈,实际上,这两类产品的设计理念及应用场合是完全不同的。 内存数据库就是将数据放在内存中直接操作的数据库,它利用内存的读写速度比磁盘快、内存是随机访问而...
  • 关系数据库完整性

    千次阅读 2017-06-10 22:16:32
    数据库完整性约束用于保证数据的正确性。系统在更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。关系模型中有四类完整性约束:实体完整性、域完整性、参照完整性和用户定义...
  • 在社交类系统中,用户与用户的好友关系的设计必不可少,那么如何设计好友的数据库至关重要,本篇文章带大家学习一下相关的设计方案。 基础分析 第一步,有一张用户表,表内包含用户的基本信息,比如账号、姓名...
  • 实时数据库,内存数据库关系数据库比较

    万次阅读 多人点赞 2018-09-26 18:55:10
    内存数据库 内存数据库就是将数据放在内存中直接操作的数据库,它利用内存的读写速度比磁盘快、内存是随机访问而磁盘是顺序访问这两个特点,将数据保存在内存中,在内存中模仿...关系数据库是建立在集合代数基础上...
  • NoSQL和关系数据库的操作比较

    千次阅读 2020-02-26 20:49:28
    理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点; 熟练使用四种数据库操作常用的Shell命令; 熟悉四种数据库操作常用的Java API。 1.2 实验软硬件环境 操作系统:Linux; Hadoop版本:...
  • 数据库之关系数据库之超码,候选码,主码,主属性,非主属性(非码元素)之间的关系 超码(Super Key): 在关系模型中能唯一标识一个元组的属性集称为关系模式的超码。 候选码(Candidate Key): 不含多余属性的...
  • NoSQL数据库与关系数据库的比较(1)关系数据库优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持。劣势:可扩展性较差,无法较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,261,489
精华内容 504,595
关键字:

关系数据库