不确定如何在此关系数据库模式中实现某些约束和关系

new*_*int 2 mysql database-design

我正在为学校项目设计 dB- 机票数据库。(使用 MySQL 工作台)

到目前为止,我想出了以下设计: 数据库图

以下是我无法弄清楚的几件事:

  1. 将外键作为非整数值(例如Varchar)是个好主意吗??
  2. 数据库需要以某种方式跟踪预订的座位数量和特定航班上的乘客数量。不知道在哪里放置这些属性。
  3. 如何确保Flight特定航班的到达城市和出发城市(从表中)不同?

小智 5

你得到你所支付的 SO。反对使用自然键(在这种情况下是名称而不是数字)的建议很常见,但被误导了。如果你不相信我,问问你的教授。

座位数似乎是飞机的财产,对吧?预订座位数似乎是预订座位数,按航班号分组。

到达和离开城市可以用约束来CHECK约束。您可能还想确保在抵达之前出发(假设是 21 世纪机场)。

你的设计非常好,比你得到的一些建议要好。坚持下去,不要担心您的键的数据类型,不要寻找触发器之类的奇特来实现应用程序逻辑(并且不要忽视对应用程序的真正约束)。做CREATE TABLE几次RTFM 。如果您认为某个约束无法声明,我建议您在项目中将其记录为 DBMS 中的缺陷。

一定要仔细考虑什么是独特的。我怀疑您是否需要 BookingID,因为PassengerID、Flight# 和Seat 似乎是唯一的。乘客是复杂的(在真实的数据库中你会有一堆表来描述某人)所以他们需要一个 ID 以便于参考,但你仍然可能不希望两条记录共享姓名和地址。