Я часто вижу людей, использующих искусственные/суррогатные ключи в реляционных базах данных. Думая об этом, мне кажется, что, хотя это упрощает join-Queries, это усложняет вставку новых кортежей. Возьмем следующий пример:Суррогатные ключи затрудняют ввод?
R1 (a, b, c) R2 (c, d, e) c является суррогатным первичным ключом R2, на который ссылается R1 (c). Если я хочу вставить данные в R1 и R2, мне сначала нужно проверить, существует ли уже существующий R2-кортеж для R2, и если это так, я должен получить его соответствующий искусственный ключ, чтобы я мог ссылаться на него в кортеж для R1.
Используя естественные ключи: R1 (а, б, д, е) R2 (д, е) Атрибуты D и Е являются естественным первичный ключ набор для R2, на который ссылается R1 (д, е). Если я хочу вставить новый кортеж в R1 и R2, я просто могу их вставить, потому что для кортежа R1 известен внешний ключ (т. Е. Значение набора первичных ключей R2).
Правильно ли я в своем предположении или я что-то упускаю?
(a) Ваши права. И есть намного больше: (б) С суррогатами вы теряете реляционную целостность и (c) вы теряете навигационную (реляционную) силу. Это приводит к еще большему количеству объединений (миф о меньших объединениях является ложным). Причина в том, что суррогаты нарушают правило ** независимости доступа ** в реляционной модели *. – PerformanceDBA