可以根据表中的另一个约束或其他变量来打开或关闭唯一性

时间:2013-12-13 17:22:53

标签: mysql unique-constraint

我是SQL的新手所以请原谅我的术语是否有点过时。我正在使用phpMyAdmin v3.4和MySQL(服务器版)v5.5,我正在建立一个简单的数据库(只有3或4个表)作为我的高尔夫俱乐部的善意姿态,允许会员注册玩在周六或周日举行的比赛中。如果他们愿意,会员可以在这两天玩(如果他们有精力!)但他们每天只能玩一次。表格是:

会员:memberName,memberID

TEE_TIMES:日(周六或周日的选择),时间

预订:day_FK,time_FK,memberID_FK,bookingRef

我在BOOKINGS表中遇到的问题是我目前的memberID_FK是唯一的,因为大多数成员会在一天或另一天玩,所以95%的时间都很好,因此它们只会出现在表中一次。但是,会有奇怪的成员希望在“两个”日玩。我可以通过2个BOOKINGS表(而不是1个)来解决这个问题。 BOOKINGS_SATURDAY和BOOKINGS_SUNDAY的单独表格,但我认为这将是不好的做法和低效率,因为我有2个相同的表格结构(虽然名称不同)来管理而不是1。

我想我所要求的是可以(memberID_FK)唯一性根据另一个约束或表中的其他变量(在这种情况下是选择的日期)打开或关闭 - 可能是某种聪明/动态关系memberID_FK和day_FK?我宁愿把它作为一个SQL表结构实现,因为我还不熟悉编码,尽管如此,我完全乐于实现最终目标的不同方式,例如:进一步分割表格(而不是复制结构)。

2 个答案:

答案 0 :(得分:1)

使用复合唯一键:

CREATE TABLE Bookings
...
UNIQUE KEY member_day (memberID_FK, day_FK)

答案 1 :(得分:0)

FK并不是唯一的,它们通常处于一对多关系的许多方面。

在member_id和day(甚至包括时间?)

之间创建一个唯一键

PK(在您的情况下,成员表中的memberID和开球时间表中的日期)应该是唯一的,但FK方面可以不是唯一的