我很难用正确的方式来组织这件事……
我正在构建一个具有竞赛评判功能的事件管理应用程序。将有多轮比赛,每轮有多名评委和多名参与者。任何给定的裁判可以在多轮中进行评判,任何给定的参与者可以参与多轮。但从每一轮开始,每个参赛者将只有一个评分。
我创建了以下表格:
- 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_participantuser_role定义了法官、参与者、管理员、支持等。然后我将所有用户放在一个表中,并分配了一个角色-这就是让我感到困惑的地方。例如,当我定义分数时,这意味着我必须包括用户表中的2个键来定义裁判和参与者。做这件事有没有什么我没想到的问题?我最初打算有单独的评判表和参与者表,但我认为我现在的结构更符合“正确的方式”。我还有什么没想到的呢?
发布于 2013-04-29 22:57:54
表中的外键数量可以与字段的数量一样多。您不能让一个字段同时作为两个不同表的外键。
让评委和参与者字段都指向users表,您的“score”表没有问题。例如:
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-29 22:57:32
对同一个表使用多个外键是完全可以接受的。与任何外键关联一样,您只需注意如何join查询中的所有内容,因为在某些情况下,这可能会导致性能问题。
https://stackoverflow.com/questions/16281616
复制相似问题