首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代理密钥作为外部密钥

代理密钥作为外部密钥
EN

Database Administration用户
提问于 2017-01-19 19:10:15
回答 2查看 804关注 0票数 0

我有一个关于代理键的问题,比如我有两个表(在sql server中):

表A: Student_ID,名称,学校,科

表B: Book_ID、Student_ID、IssueDate、BookName

如果Student_ID是一个群集代理项,并且名称是非聚集索引。如何在不知道Student_ID的情况下手动将数据输入表B,我知道我可能需要在表A中进行查找才能找到ID,但这样做并不有效。有什么办法让这件事更有效率吗?在考虑插入时,我试图考虑代孕密钥本质上是如何以外键的效率来工作的。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-01-19 20:05:36

假设Student_ID是一个身份

代码语言:javascript
复制
INSERT INTO [student] ([name]) VALUES ('penny');
declare @studentID int =  (select @@IDENTITY);
insert into studentBood (studentID, bookID) values (@studentID, 1);

insert into [studentBook] ([studentID], [bookID]) 
select [student].[iden], 13
from [dbo].[student] 
where name = 'penny';

select * from studentBook

select * from student
票数 0
EN

Database Administration用户

发布于 2017-01-19 19:43:15

您可以在表B中而不是在Student_ID中添加学生的名字,但是这不会被规范化,而且您将复制数据,而且如果您没有约束,那么您可能会添加没有在表A中注册的学生。name列的字节肯定会比Student_ID多。查找将是有效的,因为您在表A中使用Student_ID作为聚集索引。如果按该列进行查询过滤,您的搜索将很快,SQL引擎将在执行计划中使用索引查找操作,即使表很小,SQL也会将整个表放入缓存(RAM)中,这样就不必从磁盘中读取。对于事务性应用程序,您的设计很好,对于数据仓库来说,您可以使用允许复制数据的非规范化设计。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/161634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档