Я использую это как шарм, без дополнительного кода.
shared_ptr<int> x(NULL, [&](int *) { CloseResource(); });
Суперключ - это набор столбцов, который однозначно идентифицирует строку. Ключ кандидата - это МИНИМАЛЬНЫЙ набор столбцов, который однозначно идентифицирует строку. Таким образом, по сути, суперключ - это ключ-кандидат с дополнительными ненужными столбцами в нем.
Для меня суперключ обычно вносит неоднозначность в отношении ключа-кандидата