Postgresql позволяет при желании определить первичный ключ, используя группу столбцов вместо одного, например:
PRIMARY KEY(a_id, b_id)
Но имеет ли значение порядок столбцов в этом определении? Есть ли какая-либо практическая или фактическая разница между вышеприведенным и нижеприведенным:
PRIMARY KEY(b_id, a_id)
Документация не рассматривает это напрямую. Она подразумевает, что порядок не должен иметь значения, и когда я запрашиваю таблицы information_catalog, я не вижу ничего, что могло бы указать на разницу в порядке параметров.
Но использование \d
команды на двух таблицах с использованием альтернативных определений и порядка столбцов, как описано в выводе, действительно меняется. По-видимому, есть что-то, pg_catalog
что сохраняет порядок определения первичного ключа, но означает ли это, что есть какая-либо функциональная разница между двумя определениями?
Спасибо
решение1
Но имеет ли значение порядок столбцов в этом определении? Есть ли какая-либо практическая или фактическая разница между вышеприведенным и нижеприведенным:
Порядок столбцов в PRIMARY KEY
важен, поскольку базовый UNIQUE
индекс b-tree создается с атрибутами в этом порядке, и это влияет на эффективность поиска индекса. Обычно сначала нужно получить наиболее селективные атрибуты. Это влияет только на производительность, но не меняет смысла запросов.
Здесь нетсемантическийразница, поскольку UNIQUE (a, b)
подразумевает UNIQUE (b,a)
.