我是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表结构实现,因为我还不熟悉编码,尽管如此,我完全乐于实现最终目标的不同方式,例如:进一步分割表格(而不是复制结构)。
答案 0 :(得分:1)
使用复合唯一键:
CREATE TABLE Bookings
...
UNIQUE KEY member_day (memberID_FK, day_FK)
答案 1 :(得分:0)
FK并不是唯一的,它们通常处于一对多关系的许多方面。
在member_id和day(甚至包括时间?)
之间创建一个唯一键PK(在您的情况下,成员表中的memberID和开球时间表中的日期)应该是唯一的,但FK方面可以不是唯一的