基础概念
数据库(database)<文件柜>、
表(table)<文件>、
列(column)、
行(row)、
主键(primary key)
1.1什么是数据库
“数据库”这个术语用法很多,从SQL角度出发,数据库是以某种有组织的方式存储的数据集合。如果将数据库
比作一个文件柜
。文件柜只是一个存放数据的物理位置,它不管数据是什么,也不管数据是如何组织的。
数据库(database)
保存有组织的数据的容器(通常是一个文件或一组文件)。
tips:通常的一些误用容易导致概念混淆
人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生许多混淆。准确的讲:数据库软件应称为数据库管理系统(DBMS)
。数据库是通过DBMS创建和操作的容器,而具体它究竟是什么,形式如何,不同的数据库有着不同的特点。
1.2表
①表的概念
我们往文件柜里放资料时,并不是随便将它们扔进某个抽屉就完事儿了,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。
在数据库的领域中,这种文件称为表。表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其它的信息清单。
表(table)
某种特定类型数据的结构化清单。
tips:这里的关键一点,存储在表中的数据是同一种类型的数据或者清单(指数据所属清单分类,不是指字段的类型)。不应该将 顾客清单 与 订单的清单 存储在同一个数据库表中,否则以后得检索和访问会很困难。应该创建两个表,每个清单一个表。
②表名
数据库中的每个表有一个名字来标识自己。这个名字是唯一的
,即同一个数据库中没有其他表具有相同的名字(但在不同的数据库中可以使用相同的表名)。
使 表名 成为唯一的,实际上是数 据库名+表名(+其它..)的组合。也就是说虽然一个数据库中不能两次使用相同的表名,但在不同的数据库中完全可以使用相同的表名。
③模式(schema)
模式:关于数据库和表的布局及特性的信息。
表具有一些特性,这些特性定义了数据在表中如何存储,包括存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的模式(schema)
,模式可以用来描述数据库中的特定的表,也可以用来描述整个数据库(和其中表的关系)。
1.3 列和数据类型
由列组成表,列存储表中某部分的信息。
列(column)
表中的一个字段。所有表都是由一个或者多个列组成的。
这里可以将表理解成一个Excel表格,表格中每一列存储着某种特定的信息。例如在顾客表中一列存储顾客编号,另一列存储顾客姓名,而地址、性别、身高、VIP等级等都存储在各自的列中。
tips:
①数据分解:
正确的讲数据分解为多个列极为重要。例如地址、性别、身高应该总是被彼此独立的列。通过分解这些数据,才有可能利用特定的列对数据进行分类和过滤
(如找出所有男性、身高大于170的顾客。如果性别和身高组合在一个列中,则很难过滤出想要的数据)。
通常根据具体需求来决定把数据分解到何种程度。
②数据类型:
允许什么类型的数据。每个表都有相应的数据类型,它限制(或允许)该列中存储的数据。
- 数据库中每个列都有相应的数据类型。数据类型(datatype)定义了列可以存储哪些数据种类。例如,如果列中存储的是数字,则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、金额等,则应该规定好恰当的数据类型。
- 数据类型限定了可存储在列中的数据种类,数据类型还帮助正确地分类数据,并在优化磁盘使用方面起重要作用。因此,在创建表时必须特别关注所用的数据类型。
- tips:数据类型兼容
数据类型及其名称是SQL不兼容的一个主要原因。虽然大多数基本数据类型得到了一致的支持,但许多高级的数据类型却没有。更糟的是,偶然会有相同的数据类型在不同的DBMS种具有不同的名称。对此用户毫无办法,重要的是在创建表结构时要记住这些差异。
1.4行
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象为表格(Excel),表格中垂直的列为表列,水平行为表行。
例如,顾客表可以每行存储一个顾客。表中的行编号为记录的编号。
行(row) :表中的一个记录。
tips:是记录还是行?
可能听到用户提到行时称其为数据库记录(record)。这两个术语多半是可以互通的,但从技术上说,行
才是正确地术语。
1.5主键
表中每一行都应该有一列(或几列)可以唯一标识自己。顾客表可以使用顾客编号、订单表可以使用订单ID、学生表可是使用学生号。
主键(primary key)
一列(或几列),其值(value)能够唯一标识表中每一行。
唯一标识表中每行的这个列(或这几列)称为主键。
主键用来表示一个特定的行,没有主键,更新或删除表中特定的行就极为困难,因为你不能保证操作只涉及相关的行,并没有伤及无辜。
-
tips:应该总是定义主键
虽然并不总是需要主键,但多数数据库设计者都会保证他们创建的每个表具有一个主键,以便于以后得数据操作和管理。 -
主键的特点(必要条件)
- ①任意两行都不具有相同的主键值;
- ②每一行都必须具有一个主键值(主键列不允许空值NULL);
- ③主键列中的值不允许修改或更新;
- ④主键值不能重用(如果某行从表中删除,他的主键不能赋给以后的新行)。
主键通常定义在表的一个列上,但并不是必须这样做,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但其中单个列的值可以不唯一)。
在这里简单介绍一下 外键
(ps外键
:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表
,具有此外键的表被称为主表的从表
。外键又称作外关键字。)
可以这样理解:如果公共列在一个表中是主键,那么这个公共列称为另一个表的外键。table_A和table_B两个表,他们有一个公共的列column_Key。而column_Key是table_A的主键,那么 column_Key就是table_B的外键。A是主表,B是A的从表。
1.6什么是SQL
发音为字母S-Q-L或者sequel 是Structured Query Language的缩写,中文翻译为结构化查询语言
。
SQL是一种专门用来与数据库沟通的语言。
与其他编程(Java、OC、C等)语言不同,SQL中只有很少的词,这是有意而为的。设计SQL的目的是很好的万策划给你一项任务——提供一种从数据库中读写数据的简单有效方法。
- SQL的优点:
- ① SQL不是某个特定数据库厂商专有的语言。绝大多数重要的DBMS支持SQL,所以学习次语言使用户几乎能与所有数据库打交道。
- ②SQL简单易学。它的语句全都是由有很强描述的英语单词组成,而且这些单词的数目不多。
- ③SQL虽然看上去很简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
tips :SQL的扩展
- 许多DBMS厂商通过增加语句或指令,对SQL进行了扩展。这种扩展的目的是根据执行特定操作的额外功能或简化方法。虽然这种扩展很有用,但一般都是针对个别DBMS的,很少有两个厂商同事支持这种扩展。
- 标准SQL有ANSI标准委员会管理,从而称为ANSI SQL。所有主要的DBMS,即使有自己的扩展,也都支持ANSI SQL。各个实现有自己的名称,如Oracle的PL/SQL、微软的SQL Server用的Transact-SQL等。
网友评论