小编mot*_*our的帖子

避免复合键的最佳实践?

假设我的学生每年都填写一份调查问卷,其中包含一些问题(称为字段),这些问题的答案是实值(称为值)。每个学生可以回答调查,最多一年一次。

一个简单的调查示例:

  • 2012年:讲座质量(0-100)
  • 2013年:讲座质量(0-100)和难度(0-100)

我面临一个困境:使用复合键或检查约束。哪种解决方案是最佳实践?

没有复合键:
我创建了以下表结构,但我需要一个约束来确保它field.yearsurvey.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)

sql-server primary-key

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

primary-key ×1

sql-server ×1