我正在制作一个简单的测验数据库,其中一个问题有一个答案和一个或多个图像文件,属于一个子主题,而该子主题又属于一个主题。此外,每个小组可能属于三个级别之一。
这就是我设置数据库的方式:
QUESTION
-------------------
question_id pk
question varchar
answer varchar
subtopic_id foreign_key
MEDIA
-------------------
media_id pk
file_name varchar
question_id foreign_key
SUBTOPIC
-------------------
subtopic_id pk
subtopic varchar
topic_id foreign_key
TOPIC
-------------------
topic_id pk
topic varchar
level choices(1,2,3)
我的数据库设计得当吗?如果没有,我怎样才能做得更好?
编辑:我希望显示一个问题(和图像,如果存在),并将用户的答案与正确答案进行比较。我需要主题和子主题才能显示正确的问题。
Edit2:添加了您的建议。
编辑3:更新了数据库说明。
请查看此图表:
有些说明:
感谢。
答案 0 :(得分:15)
答案 1 :(得分:3)
由于问题属于子主题,因此问题表应具有子主题id的外键
答案 2 :(得分:3)
当然,这是标准化的,并且根据您的要求看起来很好。但是,您可能已将subtopic_id
停在问题表上。
答案 3 :(得分:2)
FROM question JOIN MEDIA USING (question_id)
)。除了那些小错误之外,它对我来说很好。
答案 4 :(得分:0)
对命名约定的建议:
主键:someNameId 外键:someOtherName_Id
目前在几张桌子中你有media_id和question_id。如果不看数据结构,目前还不清楚是什么。现在假设每个表中有80个表和20到40个属性。你会迷失在外键的哪里,哪里是主键。