Eu tenho uma pergunta sobre chaves substitutas, digamos que eu tenha duas tabelas (no servidor sql):
Tabela A : Student_ID, Nome, Escola, Seção
Tabela B : Book_ID, Student_ID, IssueDate, BookName
Se Student_ID for uma chave substituta clusterizada e Name for um índice não clusterizado. Como alguém inseriria dados manualmente na Tabela B sem saber o Student_ID. Sei que talvez tenha que fazer uma pesquisa na tabela A para encontrar os IDs, mas isso não seria eficiente. Existe alguma maneira de tornar isso eficiente? Estou tentando pensar como as chaves substitutas funcionam essencialmente em termos de eficiência como uma chave estrangeira ao considerar as inserções.
Você poderia apenas adicionar o nome do aluno na Tabela B em vez de Student_ID, mas isso não seria normalizado e você estaria duplicando os dados, também se você não tiver restrições, pode ser possível adicionar alunos que não estão registrados em Tabela A. A coluna Name com certeza usará mais bytes que Student_ID. A pesquisa será eficiente, pois você está usando Student_ID como índice clusterizado na Tabela A. Se você fizer consultas filtrando por essa coluna, sua pesquisa será rápida, o SQL Engine usará uma operação de busca de índice no plano de execução e mesmo que a tabela seja pequena O SQL colocará toda a tabela no cache (RAM) para que não precise ler do disco. Para um aplicativo transacional, seu design é bom, para um data warehouse, você pode usar um design desnormalizado onde a duplicação de dados é permitida.
Assumindo que Student_ID é uma identidade