[英]SQL Server primary / foreign keys
我正在开发中,我有一个表,一个系统Employees
与有关员工多列。 我有一个JobTitle
列和Department
另一列。
在我当前的设计中, JobTitle
和Department
列是Employees
表中的复合外键,它们与Groups
表链接,该表具有2列复合主键( JobTitle
和Department
)以及作业描述的额外列。
我不开心这个设计,因为我认为,联用2化合物2个表varchar
列不好的表现,我认为这将是更好的有一个Integer
列(自动编号) JobTitleID
用作主键Groups
table和作为Employees
表中的外键而不是文本JobTitle
和Department
列。
但我不得不这样做,因为当我将员工列表(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.