我有两个SQL表:Job和Employee。我需要比较工作语言的熟练程度和员工语言的熟练程度。语言能力由语言和语言水平组成。
create table dbo.EmployeeLanguageProficiency (
EmployeeId int not null,
LanguageProficiencyId int not null,
constraint PK_ELP primary key clustered (EmployeeId, LanguageProficiencyId)
)
create table dbo.JobLanguageProficiency (
JobId int not null,
LanguageProficiencyId int not null,
constraint PK_JLP primary key clustered (JobId, LanguageProficiencyId)
)
create table dbo.LanguageProficiency (
Id int identity not null
constraint PK_LanguageProficiency_Id primary key clustered (Id),
LanguageCode nvarchar (4) not null,
LanguageLevelId int not null,
constraint UQ_LP unique (LanguageCode, LanguageLevelId)
)
create table dbo.LanguageLevel (
Id int identity not null
constraint PK_LanguageLevel_Id primary key clustered (Id),
Name nvarchar (80) not null
constraint UQ_LanguageLevel_Name unique (Name)
)
create table dbo.[Language]
(
Code nvarchar (4) not null
constraint PK_Language_Code primary key clustered (Code),
Name nvarchar (80) not null
)
我的问题是关于LanguageProficiency表。我添加了Id有PK但我不确定这是最好的选择。
您如何看待这个计划?
答案 0 :(得分:0)
您对EmployeeId,LanguageProficiencyId的约束允许员工每种语言具有多种熟练程度。这听起来违反直觉。
这样会更干净,因为它只允许每种语言输入一个条目:
create table dbo.EmployeeLanguageProficiency (
EmployeeId int not null,
LanguageId int not null,
LanguageLevelId int not null,
constraint PK_ELP primary key clustered (EmployeeId, LanguageId)
)
目前我还没有看到表格LanguageProficiency的意思。
同样适用于工作当然。除非你想允许“范围”的熟练程度。但假设“熟练程度太高”没有受到伤害,可以通过查询中的> =语句轻松定义。
RGDS