Формально:
- «Суперключ» - это набор атрибутов, которые вместе взятые способны однозначно идентифицировать строки.
- «Ключ» - это минимальный суперключ - т.е. если вы уберете какой-либо атрибут из него, он больше не будет уникальным.
Так что в вашем примере: {A, B} равно , а не ключ, поскольку он не минимален (вы можете убрать B и сохранить уникальность).
В то время как типичная СУБД будет , вы сможете создать уникальное ограничение, которое«содержит» ПЕРВИЧНЫЙ КЛЮЧ, это не очень хорошая идея - вы бы нарушили принцип проектирования базы данных, согласно которому «все должно зависеть от ключа, всего ключа и ничего, кроме ключа».
Кстатизачем тебе вообще такое делать?Вы просто пытаетесь избежать двух индексов (на {A} и {A, B}) по соображениям производительности?Если это так, имейте в виду, что «индекс» и «ключ» - это две разные концепции: первая связана с физикой / производительностью, а вторая - логично.Тот факт, что ключ часто поддерживается индексом (по соображениям производительности), не должен стирать это различие.
В зависимости от вашей СУБД, вы, вероятно, сможете создать INDEX для {A, B} иПЕРВИЧНЫЙ КЛЮЧ на A без необходимости складывать INDEX на {A}.