Sql Server:创建具有多个外键的表

问题描述 投票:0回答:1

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

那些是:

BusCity:
旅游城市
BusType:
交流/非交流
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)。

请帮助我。

网上巴士票预订

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

管理员

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

客户

客户可以通过巴士名称/出行城市出发和到达/单程或回程日期和价格搜索可用巴士预订车票。

  • 需要有一个搜索功能来列出所有可用的巴士 以及巴士详情。

  • 客户无需登录即可搜索和了解详情。任何 用户可以搜索并查看可用的巴士及其路线。

  • 但是预订时,客户需要登录,客户可以 注册网络应用程序以预订门票。

  • 客户登录后,可以通过以下方式预订巴士票 输入他们需要的座位数、旅行日期和出发城市
    和前往城市。

  • 暂时不需要付款详细信息。

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

sql sql-server sql-server-2008
1个回答
0
投票

我不确定您是否提供了足够的信息来回答 1) - 我们对您的数据之间的相互依赖关系了解不够,这些数据来自于对所有可能的关系进行评论的陈述中

创建表中指定列即可创建外键:

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 Management Studio 中直观地设计表(包括关系),然后要求它编写脚本并查看结果。如果您的查询与学术练习有关,也许不要提交 SSMS 制作的脚本,因为很明显它们是机器准备好的,但您可以使用它们作为基础来检查您正在做什么

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

© www.soinside.com 2019 - 2024. All rights reserved.