/*++++++++++++++++|创建表格、各种约束条件|++++++++++++++++++++*/

/*创建表格P145
CREATE TABLE <表名>
(
         <列名><列类型><列说明>…,
         [CONSTRAINT <约束名称><约束条件>]
)
<列类型>是列的数据类型。<列说明>说明列的长度、列的默认值、主键等有关该列的约束条件。
创建主键约束 P125 
         语法: constraint 主键约束名 primary key(被定义为主键的列名)
创建外键约束 P126
         语法:constratint 外键约束名 foreign key(本表中作为外键的列名) references 参照表(参照列)主键和外键约束,其实就是创建关系

详细的内容看下面的创建表格的部分说明
*/
--=======================================================
--=下面是分别创建 学新基本信息表、课程表、职工表、成绩表=
--=======================================================

use 学生信息数据库  --指定使用的数据库,这一步以后不再说明
go
create table 学生基本信息表
(
         学号 char(4) not null constraint PK_学号 primary key,   
--学号就是列名,char(4)是列定义的数据类型,定义该列的同时可以进行         性别 char(8) not null default('男') constraint CK_性别 check (性别='男'or 性别='女'),  
--约束定义 constraint 约束名称 约束内容,         出生日期 datetime not null,
         籍贯 char(10),
         院系名称 char(20),
         专业 char(20),
         入学日期 datetime not null,
         奖学金 money default(0) constraint CK_奖学金 check (奖学金>=0 and 奖学金<=5000),
         备注 text,
         constraint CK_日期 check (出生日期<入学日期)
)
go
create table 课程表
(
         课程号 char(4) not null constraint PK_课程号 primary key , 
--在之后可以单独定义主键就是 constraint 主键约束名 primary key(被定义为主键的列名)
         课程名称 char(20) not null,
         上课教师 char(8)
)
go
create table 职工表
(
         bmh char(2) not null constraint PK_bmh primary key,
         bmmc char(10) not null,
         bmszd char(6) not null default'北京'
)
go

/*


 --==
创建用户自定义数据类型==--exec sp_addtype type,system_data_type,'null_type' exec 执行存储过程

sp_addtype 创建用户定义数据的语句,详细使用,可以参见SQL联机帮助文档
type 用户定义的数据类型名
system_data_type 系统的数据类型(除了int text datetime real类型外,其余类型如numeric float char varchar必须加上单引号,就如上面的例子一样,否则会出现错误)
null_type 是否允许为空
*/exec sp_addtype 学生成绩,'numeric(5,2)','null'  
--需要使用用户自定义数据类型-学生成绩,故在这里定义一个create table 成绩表
(
         学号 char(4) not null,
         课程号 char(4) not null,
         平时成绩 学生成绩,
         考试成绩 学生成绩,
         总成绩 学生成绩,
         开学日期 datetime,
         结束日期 datetime,
         constraint PK_成绩表 primary key(学号,课程号),
         constraint FK_学号 foreign key(学号) references 学生基本信息表(学号), 
         constraint FK_课程号 foreign key(课程号) references 课程表(课程号)
--创建外键约束语法:constratint 外键约束名 foreign key(本表中作为外键的列名) references 参照表(参照列)
)