我正在开发一个系统,其中我有一个表Employees
,其中包含多个与员工相关的列。我有JobTitle
的列和Department
的另一列。
在我目前的设计中,JobTitle
& Department
列中的Employees
列是复合外键,它们与Groups
表关联,该表有2列复合主键(JobTitle
& {{1} })和作业描述的额外列。
我对这个设计不满意,因为我认为使用2个复合Department
列链接2个表对性能不利,我认为最好有varchar
列(自动编号)Integer
用作JobTitleID
表中的主键,用作Groups
表中的外键而不是文本Employees
& JobTitle
列。Department
。
但我必须这样做,因为当我将员工列表(Excel)导入我的Employees
表时,它可以直接映射(JobTitle - > JobTitle& Department - > Department)。否则,如果我使用整数索引作为主键,那么我将手动将excel表中的文本JobTitle
列重命名为基于Groups
表中生成的键的数字,以便导入
保持我的数据库设计(与文本复合外键链接的文本复合主键)是否可以?如果没有,那么如果我在Groups
表中使用整数列作为主键并且与Employees
表中的外键相同,那么如何将员工列表从excel直接导入{{ 1}}表?
是否可以将Excel中的列表导入到SQL Server,方式是excel表中的文本Employees
将自动转换为JobTitle
表中的共同作用JobTitleID
?这将是最佳解决方案,然后我可以在Groups
表中添加JobTitleID
列作为主键和Groups
表中的外键。
谢谢,
答案 0 :(得分:2)
听起来你正试图让数据库表设计适合excel文件的导入,这不是一个好主意。忘记excel文件并首先使用正确的主键和关系设计db表。这意味着主键的int,bigint或guids。这将使您远离麻烦,除非您完全知道密钥是唯一的,例如在SSN中。导入时,将部门和职务标题填充到各自的表中,创建主键。现在已填充它们,将这些键添加到可导入到employees表中的excel文件中。
这只是我如何解决这个问题的一个例子。使用多个列作为键是没有错的,但如果你坚持使用int,bigint或guids作为主键,它肯定会让你摆脱伤害。
答案 1 :(得分:1)
请看这篇文章中的答案:how-to-use-bulk-insert...
我会创建一个简单的存储过程,将您的Excel数据导入临时不受限制的STAGING表,然后通过执行相应的表连接来执行INSERT到您的真实表中以获取正确的外键并转储无法导入的行进入IMPORT FAIL表。只是一些想法...