【发布时间】:2013-10-31 16:11:48
【问题描述】:
我在为唯一索引构建表时遇到问题。
我有一张表,里面的物品是预留的,有几个字段用来组成
ItemID - INT
Date - DATE
TimeOfDay - INT (morning = 1, afternoon = 2)
ReservationStatus - VARCHAR (expired, cancelled, confirmed, cancelled by admin)
问题在于 ReservationStatus 字段。系统应允许已取消的多行,但只有一个已确认或已过期(应用程序从已确认更改为已过期)。我没有想法,任何帮助将不胜感激。
编辑:
全表结构
ReservationID - PK Auto-incrementing Integer
SubItemID - INT FK
MemberID - INT FK
Date - DATE
TimeOfDay - INT
ReservationStatus - VARCHAR
SubItemID、Date、TimeOfDay、ReservationStatus 必须是唯一的:同一天下午不能有多个会员预订同一个 SubItem。
我通过我的应用程序验证了这一点,但是我想通过表结构确保完整性(以防程序员出错)。
【问题讨论】:
-
这是完整的表吗?是否有与每一行关联的用户 ID?您还考虑过使用 ENUM 代替 VARCHAR 来表示预订状态吗?
-
“系统应该允许多个行被取消” 同一个
ItemID?还有,桌子的PK是多少? -
@acyclic - 我省略了其他字段,请参阅编辑。对不起,我对 ENUM 不熟悉,现在会研究它。
-
@geomagas - 是的,对于相同的 SubItemID。我已将 PK 包含在编辑中。抱歉有点含糊。
标签: mysql normalization unique-index