SQL数据库数据表设计问题:详细内容见下

已知有n个人(A,B,C.....),有22种技能(技能1,技能2,技能3....),每个人有1项或者多项技能,每个人的每项技能都认证时间(A的技能1认证时间为2011-1-1,B的技能1认证时间2011-8-30......),每种技能都有认证的持续时间(即该人认证这项技能后,一定时间后技能将过期)。
问:数据表怎样设计最合理:1、能使我能查询到查询技能1时,是哪些人具有1技能;2、认证时间自己输入,到期时间自动生成。
感激不尽

三张表,人员,技能,技能认证
人员表保存人员信息,如人员ID,姓名,性别等
技能表保存技能信息,22个技能就22条记录,只记录技术相关的信息,不记录认证时间,如技能ID,技能名称
技能论证表保存人员与技能认证的信息,如 人员ID,技能ID,认证时间,有效期

查询的时候串联这三张表即可。
如查询具有技能1的人:
select a.* from 人员表 a join 技能认证表 b on a.人员ID=b.人员ID where b.技能ID=1追问

请问如果要查询同时具有技能1与技能2的人员信息,SQL语句怎么写啊?~谢谢啦

追答

select a.* from 人员表 a join 技能认证表 b on a.人员ID=b.人员ID where b.技能ID=1 and b.技能ID=2

追问

我也是这样学的,不过这样查出来结果不对额。。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-15
table person 储存人的基本信息

table skillCode 储存技能的名称和代码值

table skill 人与技能的关联表,包括认证时间以及是否有效在内

查询时 通过person,skillCode,skill 这3个表关联,可达到目的

自动生成认证时间需要设置存储过程或函数,由程序去定时调用
第2个回答  2012-03-15
三张表,人员,技能,技能认证
人员表保存人员信息,如人员ID,姓名,性别等
技能表保存技能信息,22个技能就22条记录,只记录技术相关的信息,不记录认证时间,如技能ID,技能名称
技能论证表保存人员与技能认证的信息,如 人员ID,技能ID,认证时间,有效期

同意
相似回答