CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

SQL自学指南01:什么是数据库?-源码交易平台丞旭猿

SQL真的是最简单的变成语言了,上手极快,真的没有必要花钱报课程!

为了更好的学习SQL,我会先介绍一些基本的数据库概念,为以后的学习打好基础。

数据库指的是一组相关信息的集合。

例如,电话簿可以被看做一个数据库,其中包含某地区所有居民的姓名、电话号码和地址等信息。虽然电话簿是一个十分普及和常用的数据库,但是它存在以下问题:

• 查找一个人的电话号码可能很费时,特别是电话簿包含大量条目时;

• 电话簿只按姓/名来索引,因此查找居住在特定地址的人的姓名的时候,虽然理论上可行,但对该数据库来说并不实用;

• 从打印电话簿的那一刻起,随着居民在该地区的流动、更改电话号码或迁移到同一地区内的另一个地方等动作的发生,电话簿上的信息变得越来越不准确。

电话簿的上述缺点也在任何手动编制的数据存储系统上存在,例如存储在文件柜中的病历等。由于这些纸质数据库很繁琐,所以最初开发的一些计算机应用程序就是数据库系统,它通过计算机来存储和检索数据。因为数据库系统以电子方式而不是纸质方式存储数据,所以它能够更快速地检索数据、以多种方式索引数据并向用户社区提供最新信息。

早期的数据库系统管理存储在磁带上的数据。由于磁带的数量通常要远远超过磁带读取器,所以技术人员的任务就是在需要特定数据时手动装卸磁带。而且由于那个时代的计算机内存非常小,通常情况下对于同一数据的并发请求需要多次读取磁带上的数据。

尽管这些数据库系统比纸质数据库有了显著的改进,但它们与当今技术所能实现的相差甚远。(现代数据库系统可以管理数PB(拍字节(Petabytes),计算机存储容量单位,也常用PB来表示。1PB=1024TB==2^50字节)的数据,由服务器集群访问,每个服务器在高速内存中缓存数万GB(gb也叫吉字节(GB、Gigabyte,在中国又被称为吉咖字节或京字节或十亿字节或戟),常简写为G,是一种十进制的信息计量单位。)的数据,不过这些内容可能有些超前了)

1.非关系型数据库

在计算机化数据库系统的前几十年中,数据以各种方式存储和呈现给用户。例如,在层次数据库系统中,数据表示为一个或多个树结构。如图(1-1)显示了George Blake和Sue Smith银行账户的相关数据,它们通过树结构表示:

George和Sue都有自己的树结构,包含他们的账户以及交易信息。层次数据库系统提供了定位特定客户树的工具,并能遍历该树以找到所需的帐户或交易数据。树中的每个节点可以有零个或一个父节点,以及零个、一个或多个子节点。这种配置被称作单根层次结构(single-parent hierarchy)。

另一种管理数据的方法称为网状数据库系统,它表现为多个记录集合,集合之间通过连接定义不同记录之间的关系。如图(1-2)显示了该系统中George和Sue的账户信息:

为了找到转移到Sue的货币市场账户(money market account,MoneyMkt)的交易记录,需要执行以下步骤:

1.查找Sue Smith的客户记录;

2.根据Sue Smith的客户记录链接到她的账户列表;

3.遍历账户链,直到找到货币市场账户;

4.通过链接从货币市场记录找到其交易列表。

上图(1-2)最右边的一组产品记录(Products)展示了网状数据库系统的一个有趣特性。请注意,每个产品记录(Checking、Savings等)都指向该产品类型的帐户记录列表。因此,可以从多个位置(客户记录和产品记录)访问帐户记录,这使得网状数据库具备多层次结构。

层次数据库系统和网状数据库系统如今仍然存在,不过通常在大型机领域中使用。此外,层次数据库系统在目录服务领域有了新的应用,比如微软的Active Directory和开源Apache目录服务器。然而,从20世纪70年代开始,一种新的表示数据的方法开始生根发芽,这种方法更加严谨,并且易于理解和实现。

2.关系模型

1970年,IBM研究实验室的E.F.Codd博士发表了一篇题为大型共享数据库的数据关系模型(A Relational Model of Data for Large Shared Data Banks)的论文,提出将数据表示为一组表。冗余数据用于链接不同表中的记录,而不是使用指针在相关实体之间导航。如图(1-3)显示了George和Sue的账户信息在这种情况下的表示方式:

上图(1-3)中的四个表代表了迄今为止讨论的四个实体:Customer、Product、Account和Transaction。纵观上图(1-3)Customer表的顶部,你可以看到三列:cust_id(包含客户的ID号)、fname(包含客户的名字)和lname(包含客户的姓氏)。继续向下看Customer表,可以看到两个记录行,一行包含George Blake的数据,另一行包含Sue Smith的数据。一个表能包含的最大列数因服务器而异,但这个数据通常足够大,所以不用担心(比如,Microsoft 的SQL Server允许每个表最多包含1024列)。

一个表可能包含的行数与其说是受到数据库服务器的限制,不如说是受到物理限制(即有多少磁盘驱动器空间可用)和可维护性(即在表中记录数量达到怎样的规模后仍然可以保持易用性)的问题。

关系数据库中的每个表都包含一项作为每行唯一标识的信息(称为主键),它与其他信息一起完整描述该条目。再看Customer表,cust_id列为每个客户保存了不同的编号;例如,George Blake可以由顾客ID 1来唯一标识,这个标识符永远不会被分配给其他客户,所以定位Customer表中George Blake的数据时并不需要其他的信息。

注意:每个数据库服务器都提供了一种机制,用于生成唯一的数字以用作主键值,因此你不必操心哪些数字已经被赋予为主键。

虽然我也可能选择使用fname和lname列的组合作为主键(由两个或更多列组成的主键称为复合主键),但实际上很容易出现两个或多个姓名都相同的人都在银行拥有帐户的情况。因此,选择Customer表中的cust_id列作为主键是更合适的。

注意:在本例中,选择fname/lname作为主键将被称为自然主键,而选择cust_id将被称为代理键( surrogate key)。到底选哪一种键取决于数据库设计者,但在这种本例中的选择是显而易见的,因为一个人的姓可能会更改(例如,当一个人使用配偶的姓时),但是主键一旦分配了值就不能更改。

有些表还包含用于导航到另一个表的信息,这就是前面提到的冗余数据。例如,Account表包括一个名为cust_id的列,该列包含使用该帐户的客户的唯一标识,以及一个名为product_id的列,该列包含帐户所关联产品的唯一标识,这些列称为外键,它们的作用与账户信息网络结构中各实体之间的连线相同。如果你正在查看一个特定的帐户记录,并且希望了解有关该客户的更多信息,你可以获取cust_id列的值,并使用它在Customer表中查找相应的行(在关系数据库术语中,这个过程称为连接(join),会在第三章介绍,并在第五章和第十章进行深入探讨)。

多次存储相同的数据似乎很浪费,但是某些情况下使用冗余数据可以更清楚地体现关系模型。例如,Account表包含一列作为开户客户的唯一标识符是合适的,但是如果在Account表中包含该客户的名字和姓氏就不合适了。如果客户要更改其姓名,你需要确保数据库中只有一个地方保存客户的姓名;否则,数据可能会在一个地方更改,而不会在另一个地方更改,从而导致数据库中数据的不可靠(数据的不一致)。此数据的适当位置是Customer表,其他表中只应包括cust_id值。一个列包含多条信息也是不合适的,例如使用name列同时包含用户的姓和名,或者使用address列包含街道、城市、州和邮政编码信息。优化数据库设计以确保每个独立信息只存放在一个位置(外键除外)的过程称为规范化。

让我们回到上图(1-3)中的四个表,你可能想知道如何使用这些表来查找George Blake在checking上的账户交易。首先,在Customer表中找到George Blake的唯一标识符(主键)。然后,在Account表中找到一行,该行的cust_id列包含George的唯一标识符,其product_id列与Product表中name列等于Checking的行匹配。最后,通过匹配Account表的唯一标识account_id列来定位Transaction表中对应的行。这听起来可能很复杂,但其实在SQL语言中,用一个命令就可以完成这些任务了,稍后你将看到这一点。

3.一些术语

  • 数据库:数据库是一些关联表的集合。
  • 数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列:一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容