SQL Server主键/外键
我正在开发一个系统,其中我有一个表Employees
,其中有多个与员工相关的列。我有一列JobTitle
和另一列Department
。SQL Server主键/外键
在我目前的设计中,JobTitle
&的Department
列在Employees
表复合外键和它们与有2列复合主键(JobTitle
& Department
)和作业一个额外的列的Groups
表链接描述。
我不开心的这个设计,因为我认为,联用2复合varchar
列2个表是不好的表现,我认为这将是更好的有一个Integer
列(自动编号)作为主JobTitleID
键入Groups
表,并将其作为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文件,并使用正确的主键和关系首先设计数据库表。这意味着主键的int,bigint或guid。除非你绝对知道密钥是唯一的,例如在SSN中,这将使你摆脱困境。在您导入时,然后将部门和职位填入各自的表中,创建其主键。现在它们已经被填充,将这些密钥添加到可以导入雇员表的excel文件中。
这只是我如何解决这个问题的一个例子。使用多列作为键是没有错的,但是如果你坚持使用int,bigint或guid作为主键,它肯定会让你远离危险。
看在这个职位的答案:how-to-use-bulk-insert...
我想创建一个简单的存储过程,导入Excel数据到临时不受限制的临时表,然后执行INSERT到你的真实表通过执行相应的表连接来获取正确的外键,并将无法导入到IMPORT FAIL表的行转储。只是一些想法...
非常感谢你的这个想法,我会这样做:) – 2012-03-20 16:26:08
非常感谢你的澄清。我将使用int作为主键,但是我会遵循Adolfo Perez的建议来导入数据,这比手动编辑excel更快更直接。 – 2012-03-20 16:22:26