问题描述
我正在一个项目上,以创建一个新的Java EE应用程序(JSF,Hibernate,Spring Security,Informix数据库)。该应用程序将自动输入银行员工的年度采访记录。
一开始,所有内容都输入到Excel文件中,然后生成带有各种性能图的报告(根据从0到4输入的注释)。
现在,我想做一个相当优化的数据库设计。我想到了创建以下表格:
-
Interview
,其中有列(interview_id,interview_date)
, -
Competency
,其中有列(competency_id,competency_group,competency_name)
, -
Interview_note
,其列为(interview_note_id,employee_id (FK),interview_id (FK),competency_id (FK))
但是,我对如何使其紧凑和合乎逻辑存在一些疑问。这是正确的做事方式吗?是否有任何改进要考虑以进行更多优化?
解决方法
在您的叙述和草稿数据库模式中,我发现了以下已标识的实体:Employee
,Competency
,Interview
和Interview_note
。
在这方面,仅缺少Employee
表,但是我确定您在某处。此外,您的设计非常灵活,因为它允许几个Interview_notes
来自同一采访,能力和员工。因此,可能遗漏的是做笔记的人id
。另外,如果面试只有一组笔记,则可以考虑在Interview
中标识面试者。
其中的一部分,也许是笔记的某些缺失数据(分数,满意率或一些文字注释?),您的设计似乎可以达到其目的。
数据库引擎将很好地优化您必须执行的所有联接。也许可以通过将_id
定义为主键来简化其工作。
我看不到其他优化方法:每个表都清楚地表示了一个不同的关系(在该术语的关系代数含义中),将其中任何一个合并将不可避免地导致次优方案的出现。