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

Posted

技术标签:

【中文标题】Sql Server:创建具有多个外键的表【英文标题】:Sql Server: Creating a table with multiple foreign keys 【发布时间】:2017-11-17 04:25:57 【问题描述】:

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

这些是:

BusCity: 旅游城市BusType: AC/Non ACBusInformation: 姓名、旅游城市、巴士票价等信息(由管理员添加)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)。

请帮助我。

在线巴士票预订

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

管理员

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

客户

客户可以通过巴士名称/旅行城市起止点/单程或返程旅行日期和价格搜索可用的巴士预订车票。

需要有一个搜索功能来列出所有可用的公交车 和巴士详情。

对于搜索和详细信息,客户无需登录。任何 用户可以搜索和检查可用的巴士及其路线。

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

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

暂时不需要付款详情。

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

【问题讨论】:

【参考方案1】:

我不确定您是否提供了足够的信息来回答 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 管理工作室中直观地设计您的表,包括关系,然后要求它编写脚本并查看结果。如果您的查询与学术练习有关,也许不要提交 SSMS 制作的脚本,因为很明显它们是机器准备好的,但您可以将它们用作检查您在做什么的基础

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

【讨论】:

提供有关该问题的更多信息。我希望它能给你足够的清晰度。 嗯。感觉就像你在要求我们检查/做你的作业?您希望我们花多少时间来了解您添加的信息? ,只是简单地问,我是否将信息转换为设计。特别是表格(预订详细信息,BookedStatus)被正确构建和映射。仅供参考:我不是要求任何人在这里做任何作业,只是同行评审。

以上是关于Sql Server:创建具有多个外键的表的主要内容,如果未能解决你的问题,请参考以下文章

创建具有主键和2个外键的表

从具有三个外键的表中选择一个表[关闭]

sql 删除带外键约束的表的语句是啥

如何在SQL Server中获取具有复合主键的表列表?

具有该实体外键的学说实体

mysql外键约束怎么写