我有一个关于代理键的问题,假设我有两个表(在 sql server 中):
表 A:Student_ID、姓名、学校、部门
表 B:Book_ID、Student_ID、IssueDate、BookName
如果 Student_ID 是聚集代理键并且 Name 是非聚集索引。如何在不知道 Student_ID 的情况下手动将数据输入表 B。我知道我可能必须在表 A 中进行查找才能找到 ID,但这效率不高。有什么办法可以提高效率吗?在考虑插入时,我试图考虑代理键在效率方面作为外键的本质工作方式。
您可以只在表 B 中添加学生的姓名而不是 Student_ID,但这不会被规范化并且您会重复数据,而且如果您没有限制,您可能会添加未注册的学生表 A. 姓名列肯定会使用比 Student_ID 多的字节。查找将是高效的,因为您将 Student_ID 用作表 A 中的聚集索引。如果您按该列进行查询过滤,您的搜索将很快,SQL 引擎将在执行计划中使用索引查找操作,即使表很小SQL会将整个表放入缓存(RAM)中,因此它不必去磁盘读取。对于事务性应用程序,您的设计很好,对于数据仓库,您可以使用允许重复数据的非规范化设计。
假设 Student_ID 是一个身份