用Transact-SQL代碼實現創建數據庫、數據庫表、以及設置數據庫表的約束
1、下面是一個學校要實現對學生、教師、課程以及學生選課、學生課程成績、教師上課、教師上課報酬等信息進行統一管理,並開發一個教學信息系統
*/
CREATE DATABASE TeachingManageSYS
ON PRIMARY
( NAME = TeachingManageSys,
FILENAME = 'E:\TeachingManageSYS\TeachingManageSYS.mdf',
SIZE = 3072KB,MAXSIZE = UNLIMITED,FILEGROWTH = 1024KB )
LOG ON
( NAME = 'TeachingManageSYS_log',
FILENAME = 'E:\TeachingManageSYS\TeachingManageSYS_log.ldf',
SIZE = 1024KB,MAXSIZE = 2048GB,FILEGROWTH = 10% )
GO
USE TeachingManageSYS
GO
CREATE TABLE CourseInfo /*課程信息表*/
(
Cno char(4) PRIMARY KEY NOT NULL,
Cname char(10) NOT NULL,
Credit real NOT NULL,
CouresHour int NOT NULL
)
GO
CREATE TABLE RankPayMent /*職別課酬*/
(
Trank char(6) PRIMARY KEY NOT NULL,
Payment real NOT NULL
)
GO
CREATE TABLE StuAchievement /*成績表*/
(
Sno char(6) PRIMARY KEY NOT NULL,
Sfundamental real NULL,
Sminor real NULL
)
GO
CREATE TABLE StudentCourse /*學生選課表*/
(
Sno char(6) NOT NULL,
Cno char(4) NOT NULL,
Score real NULL
)
GO
CREATE TABLE StudentInfo /*學生信息表*/
(
Sno char(6) PRIMARY KEY NOT NULL,
Sname char(10) NOT NULL,
Ssex char(2) NOT NULL,
Sage int NOT NULL,
Saddress varchar(30) NULL,
Sphoto image NULL,
Smemory varbinary(100) NULL
)
GO
CREATE TABLE Teach /*教學表*/
(
Tno char(6) PRIMARY KEY NOT NULL,
Cno char(4) NOT NULL,
Ssatisfact real NULL
)
GO
CREATE TABLE TeacherInfo /*教師信息表*/
(
Tno char(6) PRIMARY KEY NOT NULL,
Tname char(10) NOT NULL,
Tsex char(2) NOT NULL,
Tage int NOT NULL,
Trank char(6) NOT NULL,
Taddress varchar(30) NOT NULL,
Tphoto image NULL,
Tmemory varchar(100) NULL
)
GO
/**
設置約束
1、需要對TeacherInfo(教師信息表)的Tname字段進行約束,
即根據學校實際情況規定教師姓名不能重複
*/
CREATE UNIQUE NONCLUSTERED INDEX UN_TeacherInfo
ON dbo.TeachInfo
(
Tname
)
GO
/**設置外鍵*/
--USE TeachingManageSYS
--GO
/* StudentCourse(外鍵 Sno)--StudentInfo(主鍵 Sno);*/
ALTER TABLE StudentCourse WITH CHECK ADD
CONSTRAINT FK_StudentCourse_StudentInfo
FOREIGN KEY (Sno)
REFERENCES StudentInfo (Sno)
GO
/* StudentCourse(外鍵 Cno)--CourseInfo(主鍵 Cno).*/
ALTER TABLE StudentCourse WITH CHECK ADD
CONSTRAINT FK_StudentCourse_CourseInfo
FOREIGN KEY (Cno)
REFERENCES CourseInfo (Sno)
GO
/*TeacherInfo(外鍵 Trank)--RankPayment(主鍵 Trank)*/
--USE TeachingManageSYS
--GO
ALTER TABLE TeacherInfo WITH CHECK ADD
CONSTRAINT FK_TeacherInfo_RankPayMent
FOREIGN KEY (Trank)
REFERENCES RankPayment (Trank)
GO
/*設計CHECK值
規定StudentInfo表的Sage(年齡)必須在18歲到20歲之間。
*/
ALTER TABLE StudentInfo
ADD CONSTRAINT Sage_check
CHECK (Sage>=18 AND Sage<=20)
GO
/*設計默認值
教師大部分家庭住址都是在“四川成都”,
可以在TeacherInfo(教師信息表)的Taddress字段處定義默認值爲“四川成都”
*/
ALTER TABLE dbo.TeacherInfo
ADD CONSTRAINT DF_TeacherInfo_Taddress
DEFAULT '四川成都' FOR Taddress
GO
/*輸入數據
以StudentInfo表爲例,採用INSERT命令輸入三條記錄數據,由於記錄手機比較多,
我們不在列出全部的命令。
*/
INSERT INTO StudentInfo
(Sno,Sname,Ssex,Sage,Saddress)
VALUES
('010101','蔡依林','女','25','臺灣台北')
INSERT INTO StudentInfo
(Sno,Sname,Ssex,Sage,Saddress)
VALUES
('010102','劉歡','男','45','北京海淀')
INSERT INTO StudentInfo
VALUES
('010103','馬化騰','男','39','深圳南山')
GO
ON PRIMARY
( NAME = TeachingManageSys,
FILENAME = 'E:\TeachingManageSYS\TeachingManageSYS.mdf',
SIZE = 3072KB,MAXSIZE = UNLIMITED,FILEGROWTH = 1024KB )
LOG ON
( NAME = 'TeachingManageSYS_log',
FILENAME = 'E:\TeachingManageSYS\TeachingManageSYS_log.ldf',
SIZE = 1024KB,MAXSIZE = 2048GB,FILEGROWTH = 10% )
GO
USE TeachingManageSYS
GO
CREATE TABLE CourseInfo /*課程信息表*/
(
Cno char(4) PRIMARY KEY NOT NULL,
Cname char(10) NOT NULL,
Credit real NOT NULL,
CouresHour int NOT NULL
)
GO
CREATE TABLE RankPayMent /*職別課酬*/
(
Trank char(6) PRIMARY KEY NOT NULL,
Payment real NOT NULL
)
GO
CREATE TABLE StuAchievement /*成績表*/
(
Sno char(6) PRIMARY KEY NOT NULL,
Sfundamental real NULL,
Sminor real NULL
)
GO
CREATE TABLE StudentCourse /*學生選課表*/
(
Sno char(6) NOT NULL,
Cno char(4) NOT NULL,
Score real NULL
)
GO
CREATE TABLE StudentInfo /*學生信息表*/
(
Sno char(6) PRIMARY KEY NOT NULL,
Sname char(10) NOT NULL,
Ssex char(2) NOT NULL,
Sage int NOT NULL,
Saddress varchar(30) NULL,
Sphoto image NULL,
Smemory varbinary(100) NULL
)
GO
CREATE TABLE Teach /*教學表*/
(
Tno char(6) PRIMARY KEY NOT NULL,
Cno char(4) NOT NULL,
Ssatisfact real NULL
)
GO
CREATE TABLE TeacherInfo /*教師信息表*/
(
Tno char(6) PRIMARY KEY NOT NULL,
Tname char(10) NOT NULL,
Tsex char(2) NOT NULL,
Tage int NOT NULL,
Trank char(6) NOT NULL,
Taddress varchar(30) NOT NULL,
Tphoto image NULL,
Tmemory varchar(100) NULL
)
GO
/**
設置約束
1、需要對TeacherInfo(教師信息表)的Tname字段進行約束,
即根據學校實際情況規定教師姓名不能重複
*/
CREATE UNIQUE NONCLUSTERED INDEX UN_TeacherInfo
ON dbo.TeachInfo
(
Tname
)
GO
/**設置外鍵*/
--USE TeachingManageSYS
--GO
/* StudentCourse(外鍵 Sno)--StudentInfo(主鍵 Sno);*/
ALTER TABLE StudentCourse WITH CHECK ADD
CONSTRAINT FK_StudentCourse_StudentInfo
FOREIGN KEY (Sno)
REFERENCES StudentInfo (Sno)
GO
/* StudentCourse(外鍵 Cno)--CourseInfo(主鍵 Cno).*/
ALTER TABLE StudentCourse WITH CHECK ADD
CONSTRAINT FK_StudentCourse_CourseInfo
FOREIGN KEY (Cno)
REFERENCES CourseInfo (Sno)
GO
/*TeacherInfo(外鍵 Trank)--RankPayment(主鍵 Trank)*/
--USE TeachingManageSYS
--GO
ALTER TABLE TeacherInfo WITH CHECK ADD
CONSTRAINT FK_TeacherInfo_RankPayMent
FOREIGN KEY (Trank)
REFERENCES RankPayment (Trank)
GO
/*設計CHECK值
規定StudentInfo表的Sage(年齡)必須在18歲到20歲之間。
*/
ALTER TABLE StudentInfo
ADD CONSTRAINT Sage_check
CHECK (Sage>=18 AND Sage<=20)
GO
/*設計默認值
教師大部分家庭住址都是在“四川成都”,
可以在TeacherInfo(教師信息表)的Taddress字段處定義默認值爲“四川成都”
*/
ALTER TABLE dbo.TeacherInfo
ADD CONSTRAINT DF_TeacherInfo_Taddress
DEFAULT '四川成都' FOR Taddress
GO
/*輸入數據
以StudentInfo表爲例,採用INSERT命令輸入三條記錄數據,由於記錄手機比較多,
我們不在列出全部的命令。
*/
INSERT INTO StudentInfo
(Sno,Sname,Ssex,Sage,Saddress)
VALUES
('010101','蔡依林','女','25','臺灣台北')
INSERT INTO StudentInfo
(Sno,Sname,Ssex,Sage,Saddress)
VALUES
('010102','劉歡','男','45','北京海淀')
INSERT INTO StudentInfo
VALUES
('010103','馬化騰','男','39','深圳南山')
GO