表1-5 student基本表表
______________________________________________
Sno Sname Ssex Birthday Class
103 李勇 男 1982-3-4 95031
105 刘晨 女 1983-5-8 95031
107 王明 女 1983-12-21 95033
109 赵明棋 男 1982-11-4 95033
110 张惠 女 1982-9-26 95033
______________________________________________
1-6 sc基本表
______________________________________________
Sno Cno Grade
103 322 92
103 343 85
105 105 93
105 245 63
107 166 78
______________________________________________
表1-7 course基本表
______________________________________________
Cno Cname Cpno Ccredit Tno
322 数据库 166 4 804
343 数学 2
105 信息系统 322 4 825
245 操作系统 166 3 835
166 数据结构 888 4 804
324 数据处理 166 2 856
888 C语言 343 4 856
______________________________________________
表1-8 Teacher基本表
______________________________________________
Tno Name Sex Birthday Prof Depart Salary
804 李诚 男 1958-12-2 副教授 计算机系 3400
825 王萍 女 1972-5-5 助教 计算机系 1230
835 刘冰 女 1977-8-14 助教 电子工程系 1142
856 张旭 男 1969-3-12 讲师 电子工程系 2450
______________________________________________
第一步:启动 SQL Server2005 的 Management Studio ,进入管理平台界面后,鼠标右击对象资源管理器中的数据库,选择“新建数据库”后,新建数据库 school 。 第二步:在对象资源管理器中用鼠标右键单击新建数据库 school ,在弹出的快捷菜单中选择 “新建表”,如表 1-13 。 第三步:按照基本表说明内容依次建立四张基本表,需要说明的是针对于每一张基本表需要认真规定每个属性的名称和数据类型,见图 1-14 所示。另外对于主键以及外键的设计必须按照数据库概念设计模型进行规划设计后才可以实施,具体设计的方法和步骤见数据库模式设计篇章。 图 1-13
新建基本表 图 1-14
定义基本表的属性名称和数据类型 第四步:在对象资源管理器 school 数据库的树形结构中找到数据库关系图一项,用鼠标右键单击后,于弹出的快捷菜单中选择“新建关系图”,见图 1-15 所示。 第五步:在弹出的“添加表”中将全部的表都选中,单击添加按钮后,将全部表添加到新建关系图之中,见图 1-16 所示。 第六步:在基本关系图之中,用鼠标左键点击某张表的外键,将之拖至父表的主键上,从而建立起主、外键的关联。需要特别说明的是对于基本表 course ,由于 cpno 是先修课程号码,必须来自 course 表中的 cno 主码集合,因此 cpno 属于单表自映射的主外键关系。见图 1-17 所示。在建立完该关系图后,既可以将具体数据录入数据表之中。 图 1-15
新建数据库关系图图 1-17
建立主外键之间的关系 1-3-3 通过SQL创建基本表
通过 SQL 可以更便捷的创建基本表,同时也可以更好的反映数据库完整性的思维方式。建立基本表语句格式见下: 列名 数据类型 [default 缺省值 ] [not null][ UIQUE] [ ,列名 数据类型 [default 缺省值 ] [not null]] [ , primary key (列名 [ ,列名 ] … ) ] [ , foreign key (列名 [ ,列名 ] … ) references 表名 (列名 [ ,列名 ] … ) ] 1. SQL建立基本表注意事项:
(1) 表名是所要定义的基本表名称,它可以由一个或多个属性列组成。 (2) 建立表的时候,还可以定义与该表有关的关系性约束性条件,这些关系性约束性条件被存入系统的数据字典中。当用户操作数据库中表内的数据的时候,由 DBMS 自动检查该项操作是否违背这些关系性约束条件。 q Default :设置该列的缺省值,当插入数据,没有指定该列的值的时默认取该值。 q UNIQUE :唯一性约束,该列不允许取重复的值。 q foreign key 本表中的外码 .references 对应主表中的主键:外键约束。 q CHECK :用户自定义的约束条件,根据实际需要而定。 2. SQL Server 2005的主要数据类型
SQL Server 2005 的基本数据类型包括有: q char ( n ):固定长度的字符串,此数据类型可存储 1~8000 个定长字符串,字符串长度在创建时指定;如未指定,默认为 char(1) 。每个字符占用 1byte 存储空间。 q varchar ( n ):可变长字符串。(由于该类型可根据实际录入的数据字节量存储,因此在一定程度上较 char 要节省磁盘空间,故对于字符串类型数据建议使用该种类型。)此数据类型可存储最大值为 8000 个字符的可变长字符串。可变长字符串的最大长度在创建时指定,如 varchar(50) ,每个字符占用 1byte 存储空间。 q int :整数,此数据类型存储 -2147483648~2147483647 的整数,占用 4bytes 存储空间。 q smallint :小整数类型,此数据类型存储 -32768~32767 的整数,占用 2bytes 存储空间。 q numeric ( p , d ):定点数,小数点左边 p 位,右边 q 位。 q float :此数据类型存储 1~53 的可变精度的浮点值, n 为 1~24 ,占用 4bytes 存储空间; n 为 25~53 ,占用 8bytes 存储空间。 q real :此数据类型存储 -3.40E+38~-1.18E-38 的负数和 1.18E~3.40E+38 的正数。占用 4bytes 存储空间。 q datetime :此数据类型存储从 1753 年 1 月 1 日 到 9999 年 12 月 31 日 的日期。占用 8bytes 存储空间。 q smalldatetime :此数据类型存储从 1900 年 1 月 1 日 到 2079 年 6 月 6 日 的日期。占用 4btyes 存储空间。 q money :此数据类型存储 -922337203685477.5808~922337203685477.5807 的货币值,精确到小数后 4 位。占用 8bytes 存储空间。 q binary :此数据类型存储 1~8000 个字符的二进制数据,其指定长度即为占用的存储空间。 (Sno varchar (5) NOT NULL UNIQUE,
Sname varchar (20) UNIQUE,
(Sno varchar (5) NOT NULL UNIQUE,
Cno varchar (4) default '1', /*cno
默认值为1*/
Foreign Key (sno) References student(sno),
/*Sno
为当前表的外键,对应于student
表的主键*/
Foreign Key (Cno) References Course(Cno),
Check(Grade between 0 AND 100));
/*grade
成绩属性在0
~100
之间,用户定义完整性*/
SNAME varchar (8) NOT NULL,
PRIMARY KEY (SNO), /*Sno
为当前表的主键*/
CHECK (SEX=0 OR SEX=1)); /*Sex
只能够取0
或者1
,用户定义完整性*/
CNAME varchar (10) NOT NULL,
CCREDIT SMALLINT, PRIMARY KEY(cno));
建立完基本表后,由于关系数据库的模式设计需要,或者项目逻辑关系的变化,经常需要进行基本表逻辑关系的修改。修改基本表的语法见下: [add < 新列名 > < 数据类型 > [ 完整性约束 ]] -- 这里可以增加新的属性 [alter column < 列名 > < 数据类型 >] -- 修改列属性 增加完整性约束可以是 Add Constraint 数据库中约束名称 [ 完整性约束条件 ] ,如果是用户定义完整性约束可以是 check() 语句。 -- 例1 :向student 表中增加“ 入学时间” 列,其数据类型为日期型 ALTER TABLE Student ADD Scome datetime;
-- 例2 :将年龄的数据类型改成为短整型,需注意的是修改原有的列可能会破坏已有的数据 alter table student alter column sage smallint;
-- 例3 :重新设定student 的主键是sno ALTER TABLE Student ADD PRIMARY KEY(Sno);
ALTER TABLE Student drop column sage;
-- 例5 :给教师表增加一项“ 教研室号码” ,int 类型,并且不可以大于 Add
教研室号码int Constraint fk1 check(
教研室号码<20)
-- 例6 :将刚才的教研室号码约束删掉后再将教研室号删掉 Alter table teacher drop fk1
Alter table teacher drop column
教研室号码 alter table sc add constraint fk3 foreign key(sno) references student(sno)
CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL)
ALTER TABLE doc_exb DROP COLUMN column_b /*
删除列*/