假设我的学生每年都填写一份调查问卷,其中包含一些问题(称为字段),这些问题的答案是实值(称为值)。每个学生可以回答调查,最多一年一次。
一个简单的调查示例:
我面临一个困境:使用复合键或检查约束。哪种解决方案是最佳实践?
没有复合键:
我创建了以下表结构,但我需要一个约束来确保它field.year
与survey.year
CREATE TABLE survey (
surveyID int primary key,
student_name nvarchar(20),
year int,
)
CREATE TABLE fields (
fieldID int primary key,
field_name nvarchar(20),
year int,
)
CREATE TABLE data(
surveyID int,
fieldID int,
value float,
primary key (surveyID, fieldID),
foreign key(studentID),
foreign key(fieldID)
)
Run Code Online (Sandbox Code Playgroud)
使用复合键:
使用以下表结构,我有一个缺点,即为(surveyID, year)
我进行的每个连接使用元组。
CREATE TABLE survey (
surveyID int primary key,
student_name nvarchar(20),
year int,
primary key (surveyID, year)
)
CREATE TABLE fields ( …
Run Code Online (Sandbox Code Playgroud)