mysql - sql中每条记录有多个外键?

标签 mysql sql foreign-keys

我正在创建一个应用程序(使用 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/

相关文章:

sql - 在 MySQL 中创建外键产生错误 :

mysql - 使用 RStudio 连接数据库 SQL

mysql - 使用 whereor 和 where Laravel 5.4 对 sql 查询进行项目数组检查

python - 返回 peewee ORM 中分组项目的计数

java - 如何在 Hibernate 中对同一张表进行子查询?

sql - 如何修复 ORA-06575 : Package or function is in an invalid state error

php - MySql 使用左连接插入到 2 个不同的表中

Django:从具有外键的两个表中选择数据到第三个表

mysql - 识别功能依赖

mysql - SQL 获取首先创建的金额最高的行