繁体   English   中英

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

[英]Sql Server: Creating a table with multiple foreign keys

我必须在 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 )。

请帮助我。

在线巴士票预订

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

行政人员

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

顾客

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

  • 需要有一个搜索功能来列出所有可用的公共汽车和公共汽车的详细信息。

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

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

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

  • 暂时不需要支付细节。

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

我不确定您是否提供了足够的信息来回答 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 中直观地设计这些东西是一种更好的指导方式。 如果您将它们放入数据库迁移或其他以编程方式从头开始设置新数据库的机制中,您始终可以按上述方式编写脚本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM