hap*_*ude 8 mysql database-design foreign-keys
我正在尝试创建一个数据库,它有2个表具有相互依赖的外键.
第一个表称为问题,它包含有关用户提出的问题的数据,还需要保留关键字以获得在问题上回答的最佳答案.(这应该是我们的第二个表名为Answer的外键)
第二个表称为答案,它包含有关问题答案的信息,还需要持有一个question_id字段,这是该答案回答的问题的关键.这也是第一个表的外键.
当我尝试创建表时,它无法创建第一个表,因为它不知道第二个表(当我们尝试将外键声明到第二个表时尚不存在时出错)
这是我正在使用的代码:
create table question
( q_id numeric(10,0),
best_a_id numeric(10,0),
primary key(q_id),
foreign key (best_a_id) references answer(a_id),
);
create table answer
( a_id numeric(10,0),
q_id numeric(10,0) not null,
primary key(a_id),
foreign key (q_id) references question(q_id),
);
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?谢谢
创建没有外键约束的第一个表.然后按原样创建第二个表.最后,返回并更改第一个表,单独添加外键约束.
并且添加外键的SQL将如下所示:
ALTER TABLE question
ADD FOREIGN KEY (best_a_id)
REFERENCES answer(a_id);
Run Code Online (Sandbox Code Playgroud)
只是好奇,但为什么要保持两个表中的问题 - 答案关系?因为(正如ypercube指出的那样)当你第一次提出问题时,你没有"最佳答案",但你的设计需要它.在答案表中维持这种关系可能更好,类似于Olivier推荐的方式.
考虑摆脱question.best_a_id,而是添加best_answers表:
create table best_answers
( q_id numeric(10,0),
best_a_id numeric(10,0),
primary key(q_id),
foreign key (best_a_id, q_id) references answer(a_id, q_id)
);
Run Code Online (Sandbox Code Playgroud)
如果您对特定问题(可能是平局)有多个最佳答案,请将best_a_id列添加到主键.
| 归档时间: |
|
| 查看次数: |
4118 次 |
| 最近记录: |