MySQL的: BIG食品盒有几条平行的 100英寸的线。食品盒中的位置非常重要,因此跟踪英寸非常重要。
食品盒的每个隔间决定为4英寸,总共25个隔间。
用户可以以一对一的关系填写每一行,这意味着每行一个用户。
UserCompartments: (UserId, PositionStart, PositionEnd)
- > (9,52,100),(8,44,77)。
每个隔离专区也有几行,用户需要并行处理多个服务器的帮助,因此无需检查服务器是否与另一个服务器重叠。
Servers: (ServerId, ServerPositionStart, ServerPositionEnd, LineId, UserId)
- > (7,55,98,4,9),(8,53,77,9)。此表中的范围始终是User表的相应范围的子集。
ServerBooking: (CompartmentId, ServerId, UserId) -> (4, 7, 9)
CompartmentId将从1-25开始,因为总共有25个盒子。
某些服务器可能无法用于某个英寸位置。
ServerTemporaryOutage: (ServerId, ContainerId)
某些服务器可能超出其常规可用性。
ServerTemporaryAvailability (ServerId, PositionStart, PositionEnd)
现在我想根据隔间而不是英寸来获取结果,让用户看到它并决定将哪个服务器分配给哪些未预订的隔间,但问题是
1)所有东西都是以英寸为单位(ServerBooking和ServerTemporaryOutage除外),而我想要根据containerid得到结果,只是除法不会削减它,因为它对位置非常敏感。
2)我需要在预订之前获取临时停机和临时可用性,以便让用户看到哪个服务器正在做什么。我知道某种左联将会在那里,但显然这没有意义:
Select ?? from Server
join UserCompoartments u on s.userid = ...
left join serverbooking sb on sb on sb.serverid = s.serverid and sb.userid = s.userid
left join servertemporaryoutage so on so.serverid = s.serverid
left join servertemporaryavailibility sa on sa.serverid = s.serverid
这不会给我我想要的东西:
CompartmentId (1...25), Server-Statuses: Available, Booked, Overtime, Outage
结果应该有25行,因为有25个隔间。