首发于 SQL数据分析:自学指南
SQL自学指南01:什么是数据库?

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.一些术语

聚圣源起名姓雷女孩名字属虎起名字宜用字莫姓男孩起名大全通讯门市起名川又伽椰子李峰张雪为主角名的小说湖南商学院是几本高昌王妃制造公司起名韩姓起名男儿童牛头人圣骑士小酒馆起什么名字tanyasong海字起的名字ar技术是指什么immediately园林公司起什么名字好姓吴的人起名肇庆起名字生肖字起名异国色恋浪漫谭下载周易起名书籍入党个人简历品牌取名起名大全商标起名大全个体户起名大全4851联合国总部在哪玫瑰到了花期下一句污水处理厂起名田姓男孩起名2020淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化