0

无法用正确的方式来构建这个......

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

我创建了以下表格:

 - 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 个键来定义评委和参与者。这样做有没有我没有考虑的问题?我最初打算有单独的评委和参与者表,但我认为我目前的结构更符合“正确的方式”。我还没有想到什么?

4

2 回答 2

1

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

于 2013-04-29T14:57:32.183 回答
1

您可以在表中拥有与字段一样多的外键。您不能拥有一个字段同时作为两个不同表的外键。

您的“分数”表没有问题,裁判和参与者字段都指向用户表。例如

create table score (
    judge_id int,
    participant_id int,
    foreign key (judge_id) references users (id),
    foreign key (participant_id) references users (id)
);

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

就像是

create table broken (
   fieldname int,
   foreign key (fieldname) references table1 (id),
   foreign key (fieldname) references othertable (id)
);

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

于 2013-04-29T14:57:53.883 回答