#sql #postgresql #many-to-many
Вопрос:
Я пытаюсь создать таблицу в Postgres, чтобы представить взаимосвязь «многие ко многим» между строками одной и той же таблицы.
У меня есть таблица под названием верхняя одежда (которая похожа на куртки и т. Д.), И я хочу создать взаимосвязь «многие ко многим» между экземплярами верхней одежды.
Мне интересно, как лучше всего создать объединенную таблицу для моделирования этой взаимосвязи, которая учитывает тот факт, что A—B совпадает с B — A. До сих пор у меня есть это (это просто обычная таблица соединений):
CREATE TABLE outerwear_outerwear_join (
a_outerwear_id integer REFERENCES outerwear,
b_outerwear_id integer REFERENCES outerwear,
PRIMARY KEY(a_outerwear_id, b_outerwear_id)
);
Но опять же это не учитывает тот факт, что изменение порядка столбцов не должно изменять значение/уникальность строки.
Ответ №1:
Создайте UNIQUE INDEX
, используя least
и greatest
функции.
CREATE UNIQUE INDEX unq_test_a_b
ON outerwear_outerwear_join ( LEAST(a_outerwear_id, b_outerwear_id), GREATEST(
a_outerwear_id, b_outerwear_id));
Комментарии:
1. Хорошо, хорошо! Как бы я определил это в
CREATE TABLE
приведенном выше заявлении? (Я еще не выполнил его)2. @HenryWoody : Это заявление, которое будет выполняться отдельно после
create table