gpt4 book ai didi

sql - 数据库中是否存在循环引用(-形成一个圆圈的相关表)缺陷?

转载 作者:搜寻专家 更新时间:2023-10-30 23:48:09 26 4
gpt4 key购买 nike

在我的数据库中,我必须做一个Circular Reference(cycle)来获取我想要的数据,我不知道如何重新排序表来获取我想要的数据而不需要循环.

这是我的数据库的模式(或模型)——只有表名是英文的(我的母语是西类牙语),列是西类牙文: db

这个数据库是为公交车站设计的,用来管理售票,这个模型不好,因为表“TICKET”应该与“TRIP_BUS”相关,因为该表存储了随时有哪辆公交车将进行一次旅行在时间表中,但我需要知道那张票属于哪个座位,所以在这个模型中我接下来要做的是:

  1. 删除“TICKET”和“SEAT”之间的关系,然后在多对多关系之间创建一个中间表(--我们称它为“TICKET_SEAT”),以便同一个座位可以记录了公交车不同行程的许多车票。

  2. 将“TRIP_BUS”与“TICKET”从一对多关联起来(--“TRIP_BUS”PK 将是“TICKET”中的 FK)以了解车票来自哪趟行程和哪趟巴士。

如果我这样做,我会在

之间得到一个循环

TRIP_BUS -> BUS <- SECTION <- SEAT -> TICKET_SEAT <- 车票 <- TRIP_BUS

所有这些表格形成一个圆圈,我不确定数据的一致性是否会在任何时候丢失。

  • 主要问题是:循环引用是数据库中的缺陷吗?
  • 在这种情况下,循环引用是获得必要的数据?

最佳答案

这实际上不是一个循环,因为您无法从多端到一端跟踪关系并回到起点。

你有两条不同的路径从 seat 到 trip_bus。这很好。但是,您可能还潜伏着额外的约束。

举一个简单的例子,只有 BusSeatTripTicket

Bus 的主键是 BusId

Seat 有一个主键 SeatId 和一个外键 BusId

Trip 有一个主键 TripId 和一个外键 BusId

如果我们在 (BusId, SeatId)Seat(BusId, TripId) 的 Trip 上另外定义唯一索引 然后我们可以让 Ticket 成为(TicketId, BusId, SeatId, TripId)(BusId, SeatId)(BusId, TripId) 上使用外键。

这种结构意味着您不能在一辆公共(public)汽车上有一张旅行票,而是在另一辆公共(public)汽车上有一个座位。

如果我们另外让 (BusId, SeatId, TripId) 在车票上唯一,那么它会产生一个限制,即每个座位每次旅行只能有一张车票。

关于sql - 数据库中是否存在循环引用(-形成一个圆圈的相关表)缺陷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25351355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com