数据库物理设计实例

  • 格式:doc
  • 大小:131.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通过逻辑设计,进行物理结构的设计

分析后达到三范式后建立以下五个表:

TICKET_INFO 表存储火车车票各种信息PASSENGER_INFO 表存储火车乘客信息BOOK_INFO 表存储乘客订票退票信息TR_CONVERT 表存储火车票的折算信息TRAIN_INFO 表存储火车信息

一.车票信息(TICKET_INFO表):

该表主键:车票号(TICKET_NO)

二:乘客信息(PASSENGER_INFO 表)

三:火车票折算信息(TR_CONVERT 表)

四.火车信息(TRAIN_INFO 表)

五.订票退票信息(BOOK_INFO表)

2.在sqlserver2005 中建立数据库Train_Ticket_System ,建立以上各表Sql语句为:

列车信息:

CREATE TABLE TRAIN_INFO

(

TRAIN_NAME CHAR(8)PRIMARY KEY,

SOFT_COUNT INT,

SOFT_NO INT,

SLEEP_COUNT INT,

SLEEP_NO INT,

CARRI_COUNT INT

SEAT_COUNT INT

);

CREATE TABLE TICKET_INFO

(

TICKET_NO CHAR(12)PRIMARY KEY,

START_STA V ARCHAR(15)NOT NULL,

MID_STA V ARCHAR(15) ,

END_STA V ARCHAR(15)NOT NULL,

START_TIME SMALLDATETIME NOT NULL,

SPEND_TIME FLOAT NOT NULL,

SORT V ARCHAR(4)CHECK(SORT IN('软卧','卧铺','硬座'))NOT NULL,

TRAIN_NAME CHAR(8)NOT NULL,

PRICE FLOAT NOT NULL,

AMOUNT INT,

CHECK_NO INT

LEAVE_COUNT INT,

CONSTRAINT TRNAME_FK FOREIGN KEY(TRAIN_NAME) REFERENCES TRAIN_INFO(TRAIN_NAME);

);

折算信息:

CREATE TABLE TR_CONVERT

(

PASS_SORT V ARCHAR(4)CHECK(PASS_SORT IN('学生','幼儿','残疾','军人','一般')) PRIMARY KEY,

TRANS FLOAT CHECK(TRANS>=0.0 AND TRANS<=1.0)

);

乘客信息:

CREATE TABLE PASSENGER_INFO

(

ID CHAR(20),

PASS_SORT V ARCHAR(4)CHECK(PASS_SORT IN('学生','幼儿','残疾','军人','一般')), CONSTRAINT PINFO_PK PRIMARY KEY(ID),

CONSTRAINT PINFO_FK FOREIGN KEY(PASS_SORT)REFERENCES TR_CONVERT(PASS_SORT)

);

CREATE TABLE BOOK_INFO

(

TICKET_NO CHAR(12),

ID CHAR(20),

COACH_NO INT NOT NULL,

SEAT_NO INT NOT NULL,

DEAL FLOA T,

PAID FLOAT,

IN_OUT_TIME DATETIME,

STATE V ARCHAR(5)CHECK(STA TE IN('已订','退票')),

CONSTRAINT BINFO_PK PRIMARY KEY(TRAIN_NO,ID),

CONSTRAINT TR_BINFO_FK FOREIGN KEY(TRAIN_NO)REFERENCES TICKET_INFO(TRAIN_NO),

CONSTRAINT ID_BINFO_FK FOREIGN KEY(ID)REFERENCES PASSENGER_INFO(ID)

);

触发器:(如果一个车票订票,会自动更新剩余车票数属性组(数据值减一),如果更新的车票是之前退票的车票,则自动删除那个退票信息)

CREATE TRIGGER BOOK_COUNT ON BOOK_INFO AFTER INSERT

AS

BEGIN

DECLARE @TR_NO CHAR(12);

DECLARE @ID_NO CHAR(20);

SELECT @TR_NO=TICKET_NO FROM INSERTED;

UPDATE TICKET_INFO SET LEA VE_COUNT =LEAVE_COUNT-1 WHERE TRAIN_NO=@TR_NO;

SELECT @ID_NO=ID FROM DELETED WHERE TICKET_NO=@TR_NO AND STATE='退票';

IF(@ID_NO IS NOT NULL)

BEGIN

DELETE FROM BOOK_INFO WHERE ID=@ID_NO AND TICKET_NO=@TR_NO;

END

END