我正在创建一个应用程序(使用 PHP/Codeigniter/MYSQL)来跟踪事件中的志愿者。我希望多个志愿者能够登录到每个事件。我计划使用一个名为 signup
的表来执行此操作,它看起来像这样:
TABLE SIGNUP
============
VolunteerId EventId
----------- -------
12 223
13 223
15 223
12 235
13 235
19 235
两列都是外键(分别是volunteer
表和event
表的主键)。
有更好的方法吗? 我应该使用复合键作为主键吗?
最佳答案
老实说,我看不出您的设置方式有问题。像这样的表通常用于在不同对象之间建立一对多关系。我在引用给定州的县市的表中做类似的事情。 (有些城市跨越多个县。)
数据库设计最佳实践指出,您应该为表声明一个主键。您不必这样做;您可以在技术上声明一个没有主键的表。但是,请注意,如果您没有特别声明键,许多数据库引擎会在幕后简单地为您创建一个主键;然而,这可能并不适用于所有情况(通常情况下并非如此)。指定您选择的主键有利于数据库优化和组织。
因此,我认为您不妨使用复合键作为多对多表的主键,而不是创建单独的索引列。在这种情况下,这将满足表要求(因为数据库引擎无论如何都会为您创建一个主键)并且它将防止同一对出现多次,这对多对多没有任何好处引用表。
简短回答:使用复合主键 - primary key(VolunteerID, EventID)
。你不应该出错。
关于mysql - sql中每条记录有多个外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246920/