繁体   English   中英

SQL Server主键/外键

[英]SQL Server primary / foreign keys

我正在开发中,我有一个表,一个系统Employees与有关员工多列。 我有一个JobTitle列和Department另一列。

在我当前的设计中, JobTitleDepartment列是Employees表中的复合外键,它们与Groups表链接,该表具有2列复合主键( JobTitleDepartment )以及作业描述的额外列。

我不开心这个设计,因为我认为,联用2化合物2个表varchar列不好的表现,我认为这将是更好的有一个Integer列(自动编号) JobTitleID用作主键Groups table和作为Employees表中的外键而不是文本JobTitleDepartment列。

但我不得不这样做,因为当我将员工列表(Excel)导入我的Employees表时,它可以直接映射(JobTitle - > JobTitle&Department - > Department)。 否则,如果我使用整数索引作为主键,那么我将手动将Excel工作表中的文本JobTitle列重命名为基于Groups表中生成的键的数字,以便导入。

保持我的数据库设计是这样的(与文本复合外键链接的文本复合主键)可以吗? 如果没有,那么如果我使用Groups表中的整数列作为主键并且与Employees表中的外键相同,那么如何将员工列表从excel直接导入Employees表?

是否可以将Excel中的列表导入到SQL Server,以便excel工作表中的文本JobTitle将自动转换为Groups表中的corespondent JobTitleID 这将是最好的解决方案,然后我可以在Groups表中添加JobTitleID列作为主键和Employees表中的外键。

谢谢,

听起来你正试图让数据库表设计适合excel文件的导入,这不是一个好主意。 忘记excel文件并首先使用正确的主键和关系设计db表。 这意味着主键的int,bigint或guids。 这将使您远离麻烦,除非您完全知道密钥是唯一的,例如在SSN中。 导入时,将部门和职务标题填充到各自的表中,创建主键。 现在填充它们,将这些键添加到可以导入到employees表的excel文件中。

这只是我如何解决这个问题的一个例子。 使用多列作为键是没有错的,但如果你坚持使用int,bigint或guids作为主键,它肯定会让你摆脱伤害。

看看这篇文章中的答案: 如何使用 - 批量插入......

我将创建一个简单的存储过程,将您的Excel数据导入临时无限制的STAGING表,然后通过执行相应的表连接将INSERT插入到您的真实表中以获取正确的外键并将无法导入的行转储到IMPORT中失败表。 只是一些想法......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM