Sql 主键约束的警告消息
我在一个包含员工信息的表中分配主键时遇到问题。该表中没有唯一的列,我剩下的唯一选项是将三列的组合作为主键Sql 主键约束的警告消息,sql,primary-key,composite-primary-key,Sql,Primary Key,Composite Primary Key,我在一个包含员工信息的表中分配主键时遇到问题。该表中没有唯一的列,我剩下的唯一选项是将三列的组合作为主键 但它会发出一条警告信息,即警告!最大密钥长度为900字节。索引“pk_hrempid”的最大长度为1530字节。对于某些大值组合,插入/更新操作将失败我知道这将是将来插入数据的一个主要问题。是否有此警告的解决方案 另一个问题是,我是否可以将自动增值作为唯一id,建议这样做?我希望确保它不会在将来出现问题,因为我有许多表包含来自其他部门的员工信息。一些员工可能会出现在两张或两张以上的表格中 感
警告!最大密钥长度为900字节。索引“pk_hrempid”的最大长度为1530字节。对于某些大值组合,插入/更新操作将失败
我知道这将是将来插入数据的一个主要问题。是否有此警告的解决方案感谢您的帮助 虽然您尝试使用复合主键听起来是在尝试使用“自然键”的最佳实践,但使用自动递增的
ID
字段并没有什么“错误”
如果您建议的字段太大而不能用作键,那么首先它们可能不是最佳选择。您是否可以添加另一个具有更好数据类型的“自然”键列
不要忘了为将被大量查询的表选择好的索引和合适的数据类型,从而考虑可能的优化
对于主键,我会使用自动递增类型的解决方案,使用个人数据进行此类操作的问题在于,您无法保证唯一性,这是主键的基本要求。希望了解导致该错误的列数据类型定义。很难调试我们看不到的SQL DDL代码;)不要害羞,发布属性名称、数据类型和示例数据。您可能会在这里找到一位对您的业务领域具有领域知识的人,他可以为您指明一个行业标准密钥或其他受信任的标识符来源。@Widor..感谢您提供的线索..我所有的数据类型都有一个默认的nvarchar(255)(因为我从access中放大了),这对于列中的数据来说太长了,我已经更改了主键列的数据类型,那么主键就没有警告了!我是否必须更改所有其他列的数据类型(与nvarchar相比,这些列的数据也很小)…或者可以按原样放置吗?1。这肯定是SQL Server的一个限制吗?2.这并不能防止现有三列中的重复。我猜您的意思是,“除了自然键之外使用代理键没有什么‘错误’……”(旁白:我不同意),但这里的问题是DBMS无法强制执行自然键。@OTTA我应该用“如果自然键可行”或“如果自然密钥适合作为主键。“也就是说,如果“自然”和“代理”都是小的、数字的和可索引的,那么每次都使用“自然”一个。谢谢大家的建议。如果我将一个自动递增值作为所有表中所有员工的主键,我认为这会导致混乱。。不是吗?@user939615是的,您只在
员工
表上放置一个自动递增的ID
。同时引用该ID
的任何表都将只是相同的数据类型,但不是自动递增的-并且可能与员工有外键关系。