表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所示。
 
图1-16  添加基本表和基本关系图
第六步:在基本关系图之中,用鼠标左键点击某张表的外键,将之拖至父表的主键上,从而建立起主、外键的关联。需要特别说明的是对于基本表course,由于cpno是先修课程号码,必须来自course表中的cno主码集合,因此cpno属于单表自映射的主外键关系。见图1-17所示。在建立完该关系图后,既可以将具体数据录入数据表之中。
          图1-15  新建数据库关系图图                     1-17  建立主外键之间的关系
1-3-3 通过SQL创建基本表
通过SQL可以更便捷的创建基本表,同时也可以更好的反映数据库完整性的思维方式。建立基本表语句格式见下:
create  table   表名(
列名  数据类型  [default  缺省值]  [not null][ UIQUE]
[,列名 数据类型  [default  缺省值]  [not null]]
……
[,primary  key(列名 [,列名] …)]
[,foreign  key (列名 [,列名] …) references  表名 (列名 [,列名] …)]
[,check(条件)])
1. SQL建立基本表注意事项:
(1)    表名是所要定义的基本表名称,它可以由一个或多个属性列组成。
(2)    建立表的时候,还可以定义与该表有关的关系性约束性条件,这些关系性约束性条件被存入系统的数据字典中。当用户操作数据库中表内的数据的时候,由DBMS自动检查该项操作是否违背这些关系性约束条件。
(3)    语句定义说明:
qDefault:设置该列的缺省值,当插入数据,没有指定该列的值的时默认取该值。
qUNIQUE:唯一性约束,该列不允许取重复的值。
qNOT NULL:该列不允许取空值。
qPrimary Key:主键约束。
qforeign  key 本表中的外码 .references  对应主表中的主键:外键约束。
qCHECK:用户自定义的约束条件,根据实际需要而定。
2. SQL Server 2005的主要数据类型
    SQL Server 2005的基本数据类型包括有:
qchar(n):固定长度的字符串,此数据类型可存储1~8000个定长字符串,字符串长度在创建时指定;如未指定,默认为char(1)。每个字符占用1byte存储空间。
qvarchar(n):可变长字符串。(由于该类型可根据实际录入的数据字节量存储,因此在一定程度上较char要节省磁盘空间,故对于字符串类型数据建议使用该种类型。)此数据类型可存储最大值为8000个字符的可变长字符串。可变长字符串的最大长度在创建时指定,如varchar(50),每个字符占用1byte存储空间。
qint:整数,此数据类型存储-2147483648~2147483647的整数,占用4bytes存储空间。
qsmallint:小整数类型,此数据类型存储-32768~32767的整数,占用2bytes存储空间。
qnumeric(p,d):定点数,小数点左边p位,右边q位。
qfloat:此数据类型存储1~53的可变精度的浮点值,n为1~24,占用4bytes存储空间;n为25~53,占用8bytes存储空间。
qreal:此数据类型存储-3.40E+38~-1.18E-38的负数和1.18E~3.40E+38的正数。占用4bytes存储空间。
qdatetime:此数据类型存储从1753年1月1日到9999年12月31日的日期。占用8bytes存储空间。
qsmalldatetime:此数据类型存储从1900年1月1日到2079年6月6日的日期。占用4btyes存储空间。
qtime:时间(小时、分、秒)。
qmoney:此数据类型存储-922337203685477.5808~922337203685477.5807的货币值,精确到小数后4位。占用8bytes存储空间。
qbinary:此数据类型存储1~8000个字符的二进制数据,其指定长度即为占用的存储空间。
实验:建立基本表的SQL实验
--例1:建立基本表student
        CREATE TABLE Student
        (Sno varchar (5) NOT NULL UNIQUE,   
         /*Sno取值唯一,不许取空值*/
         Sname varchar (20) UNIQUE,                      
         Ssex char(1),
         Sage INT,
         Sdept varchar (15));
--例2:建立基本表sc
     CREATE TABLE SC
        (Sno varchar (5) NOT NULL UNIQUE,   
         Cno varchar (4) default '1', /*cno默认值为1*/
         GRADE Smallint,                      
         Primary Key(Sno,Cno),
         Foreign Key (sno) References  student(sno), 
         /*Sno为当前表的外键,对应于student表的主键*/
         Foreign Key (Cno) References  Course(Cno),
         Check(Grade between 0 AND 100)); 
         /*grade成绩属性在0~100之间,用户定义完整性*/
--例3:建立基本表student
        CREATE   TABLE   STUDENT
         (SNO varchar(4),
          SNAME  varchar (8)  NOT NULL,
          SAGE   Smallint,
          SSEX   varchar (1),
          sdept varchar (8),
          PRIMARY KEY (SNO), /*Sno为当前表的主键*/
          CHECK (SEX=0 OR  SEX=1));  /*Sex只能够取0或者1,用户定义完整性*/
--例4:建立基本表course
         CREATE   TABLE  COURSE
         (CNO  varchar (4),
          CNAME varchar (10)  NOT NULL,
          CPNO  varchar (4),
          CCREDIT  SMALLINT, PRIMARY KEY(cno));
1-3-4 SQL修改基本表关系结构
建立完基本表后,由于关系数据库的模式设计需要,或者项目逻辑关系的变化,经常需要进行基本表逻辑关系的修改。修改基本表的语法见下:
alter table 表名
          [add <新列名> <数据类型> [完整性约束]]   --这里可以增加新的属性
          [drop <完整性约束名>]  --删除列
          [alter column <列名> <数据类型>] --修改列属性
 注意:
    增加完整性约束可以是Add Constraint 数据库中约束名称 [完整性约束条件],如果是用户定义完整性约束可以是check()语句。
实验:修改基本表的SQL实验
--例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);
--例4:去除掉sage 列
ALTER TABLE Student drop column sage;
--例5:给教师表增加一项“教研室号码”,int类型,并且不可以大于
Alter table teacher
Add 教研室号码int Constraint fk1 check(教研室号码<20)
--例6:将刚才的教研室号码约束删掉后再将教研室号删掉
Alter table teacher drop fk1
Alter table teacher drop column 教研室号码
--例7:更改一条外键的约束
alter table sc add constraint fk3 foreign key(sno) references student(sno)
--例8:删除一个属性列
CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL) 
     ALTER TABLE doc_exb DROP COLUMN column_b /*删除列*/