首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用同一个表中的两个外键构造一个MySQL DB表吗?

我可以用同一个表中的两个外键构造一个MySQL DB表吗?
EN

Stack Overflow用户
提问于 2013-04-29 22:46:39
回答 2查看 75关注 0票数 0

我很难用正确的方式来组织这件事……

我正在构建一个具有竞赛评判功能的事件管理应用程序。将有多轮比赛,每轮有多名评委和多名参与者。任何给定的裁判可以在多轮中进行评判,任何给定的参与者可以参与多轮。但从每一轮开始,每个参赛者将只有一个评分。

我创建了以下表格:

代码语言:javascript
复制
 - user 
        - user_id
        - user_name
        - user_role_id
 - user_role
        - user_role_id
        - user_role_name
        - user_role_desc
 - round
        - round_id
        - round_name
        - round_loc
 - user_round (to join many-to-many users and rounds)
        - user_id
        - round_id
 - score
        - score_id
        - score_value
        - round_id
        - user_id_judge
        - user_id_participant

user_role定义了法官、参与者、管理员、支持等。然后我将所有用户放在一个表中,并分配了一个角色-这就是让我感到困惑的地方。例如,当我定义分数时,这意味着我必须包括用户表中的2个键来定义裁判和参与者。做这件事有没有什么我没想到的问题?我最初打算有单独的评判表和参与者表,但我认为我现在的结构更符合“正确的方式”。我还有什么没想到的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-29 22:57:54

表中的外键数量可以与字段的数量一样多。您不能让一个字段同时作为两个不同表的外键。

让评委和参与者字段都指向users表,您的“score”表没有问题。例如:

代码语言:javascript
复制
create table score (
    judge_id int,
    participant_id int,
    foreign key (judge_id) references users (id),
    foreign key (participant_id) references users (id)
);

是完全有效的SQL。您可能希望在客户端和/或数据库中添加一些逻辑,以强制参与者不能自己判断,但这是另一回事。

就像这样

代码语言:javascript
复制
create table broken (
   fieldname int,
   foreign key (fieldname) references table1 (id),
   foreign key (fieldname) references othertable (id)
);

是完全无效的。一个字段不能同时对两个不同的表是“外部”的。

票数 1
EN

Stack Overflow用户

发布于 2013-04-29 22:57:32

对同一个表使用多个外键是完全可以接受的。与任何外键关联一样,您只需注意如何join查询中的所有内容,因为在某些情况下,这可能会导致性能问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16281616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档