Sql Server:创建一个包含多个外键的表

时间:2017-11-17 04:25:58

标签: sql sql-server sql-server-2008

我必须在SQL Server中创建一组表。

那些是:

BusCity:旅游城市 BusType: AC /非AC
BusInformation:有关姓名,旅游城市,公共汽车票价等的信息(由管理员添加)
BookingDetails:在客户预订旅行后存储预订详细信息 BookedStatus:巴士的可用性。

我在创建这些表时遇到问题。

以下是我的DDL代码:

Create Table Customer  
(  
CustomerId int primary key identity(100,1),  
CustomerName varchar(100) not null,  
CustomerEmail varchar(100) not null,  
CustomerPassword varchar(50) not null,  
CustomerPhone int not null,  
)

Create Table BusCity  
(  
BusCityId varchar(10) primary key,  
BusCityName varchar(100) not null unique  
) 

Create Table BusType  
(  
BusTypeId int identity(10,1) primary key,  
BusTypes varchar(100) not null unique  
)

Create Table BusInformation  
(  
BusInformationId varchar(10) primary key,  
BusName varchar(100) not null unique,  
BusNumOfSeats int not null,  
BusFromCity varchar(10) not null,  
BusToCity varchar(10) not null,  
BusTravelPrice int not null,  
BusTypeId int,  
constraint Fk_BusInfo_BusType Foreign key(BusTypeId) references BusType(BusTypeId), 
constraint Fk_BusInfo_BusFromCity Foreign key(BusFromCity) references BusCity(BusCityId),  
constraint Fk_BusInfo_BusToCity Foreign key(BusToCity) references BusCity(BusCityId)  
)

Create Table BookingDetails  
(  
BookingDetailsId int identity(2000,1) primary key,  
CustomerId int,  
BusInformationId varchar(10),  
BookingDateofTravel Date,  
BookingFromCity varchar(10) not null,  
BookingToCity varchar(10) not null,  
BookingNumOfSeats int not null,  
BookingTravelPrice int not null,  
constraint Fk_BookingDetails_BusInformation Foreign key(BusInformationId)references BusInformation(BusInformationId),  
constraint Fk_BookingDetails_Customer Foreign key(CustomerId)references Customer(CustomerId),  
constraint Fk_BusDetails_BusFromCity Foreign key(BookingFromCity) references BusCity(BusCityId),  
constraint Fk_BusDetails_BusToCity Foreign key(BookingToCity) references BusCity(BusCityId)  
)

Create Table BookedStatus
(  
BookedStatusId int identity(3000,1) primary key,  
AvailableSeats int not null,  
BookedDate Date,  
IsAvailable bit,  
BusInformationId varchar(10),  
constraint Fk_BookedStatus_BusInfo Foreign key(BusInformationId)references BusInformation(BusInformationId)   
)

我的问题是,
1.我是否在表格之间正确映射了表格关系 2.在表中包含多个外键列( BusInformation,BookingDetails )。

请帮助我。

在线巴士票预订

此项目有两个用户角色 - 第一个是Admin,第二个是Customers。该项目允许客户在线预订旅行机票。

管理员

该网站的管理员用户可以添加城市信息,公交信息,公交路线(从城市到城市),公交车详情(每个城市的公交车信息/公交车票价格到城市详情),每辆公交车座位数,可用座位每辆巴士在预订日期,巴士可用和预订状态。

客户

客户可以通过公交车名称/旅游城市的方式搜索可用的公交车票,从单程或返程和价格到旅行日期。

  • 需要有一个搜索功能,列出所有可用的总线 和巴士详情。

  • 对于搜索和详细信息,客户不需要登录。任何 用户可以搜索并检查可用的公共汽车及其路线。

  • 但是对于预订,客户需要登录,客户可以 注册网站申请以预订门票。

  • 客户登录后,他或她可以预订公交车票 输入他们需要的座位数,旅行日期和来自城市 和城市。

  • 暂时无需付款详情。

  • 客户可以注册和预订门票。管理员可以查看所有预订 信息。

1 个答案:

答案 0 :(得分:0)

我不确定你是否给出了足够的信息来回答1) - 我们对于所有可能的关系评论中的数据之间的相互依赖关系不够了解

在create table中指定列时可以创建外键:

CREATE TABLE BusBlah (
  BusID int PRIMARY KEY,
  StatusID int not null REFERENCES StatusesTable(StatusIDColumnInStatusesTable)
  ...
)

或者可以在使用ALTER之后添加它们(这是SQL Management Studio的方式)

ALTER TABLE BusBlah  
ADD CONSTRAINT SomeConstraintName FOREIGN KEY (StatusID)  
REFERENCES StatusesTable (StatusIDColumnToReference) ;  

最终,如果您需要一组完美的脚本,您可以在SQLServer管理工作室中直观地设计表格,包括关系,然后让它编写脚本并查看结果。如果你的查询与学术练习有关,也许不要交出SSMS制作的脚本,因为很明显他们是机器准备的,但是你可以用它们作为基础检查你在做什么

如果这不是学术练习,我通常认为在SSMS中直观地设计这些东西是一种更好,更有指导性的方法。如果您将它们放入数据库迁移或其他以编程方式从头开始设置新数据库的机制,您始终可以按上述方式编写脚本