我正在为一个帮助学习语言的应用程序创建一个数据库。我需要创建因部分(语法测试、文本测试等)、主题和级别而异的测试。
USER
id (pk, autoincrement)
name
last_name
email (unique)
level_id
password
LEVEL
id (pk)
description
SECTION_TYPE
id (pk, no autoinc [to avoid creating a field for level_num])
section_name
TOPIC
?id (pk)
section_id (fk)
level_id (fk)
name
TEST
?id (pk)
topic_id (fk)
num
QUESTION
?id (pk)
test_id (fk)
num
text
has_multi_ans
ANSWER
?id (pk)
question_id (fk)
num
text
is_correct
我读到过使用复合索引可以促进快速搜索。并且按级别和主题搜索测试将是经常发生的事情。但就我而言,复合索引是一个独特的组合。
我可以使它成为一个复合主键,字段用制表符突出显示,而不是创建单个主键
id
。因为在第一种情况下,我还必须创建复合外键。这几乎可以消除创建表测试的需要,但会很混乱。
我该怎么办?
Postgres FK 引用复合 PK 有点不同,因为还有许多其他依赖字段,因此唯一的单个主键是合理的。