Как создать массив для хранения первичных ключей? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 3 таблицы (пользователи, ссылки и списки ссылок), и я хочу хранить идентификаторы пользователей и их ссылки в массиве. Однако, когда я пробую код ниже, я получаю следующую ошибку:

несовместимые типы: целое число [] и целое число

Есть ли способ сохранить user_id и массив идентификаторов ссылок в таблице?

CREATE TABLE Users (
    id serial primary key not null,
    email varchar(64) unique not null,
);

CREATE TABLE Links (
    id serial primary key not null,
    name varchar(64) not null
);

CREATE TABLE LinkLists(
    user_id integer unique not null REFERENCES Users(id),
    links integer [] REFERENCES Links(id) -- problem here --
);

Пример:

Таблица пользователей *

1 example@gmail.com

Таблица ссылок

1 google.com
2 twitter.com

Таблица списков ссылок

1 [1,2] 

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

Возможно, вам не нужен тип данных массива в таблице LinkList.

Вам нужны только два внешних ключа.

CREATE TABLE LinkLists(
    user_id integer unique not null REFERENCES Users(id),
    links integer not null REFERENCES Links(id) 
);

По моему мнению, вам не нужна третья таблица: LinkLists

Определите FK user_id для таблицы ссылок и обратитесь к пользователям.

Или лучший подход - использовать таблицу древовидной структуры, включая ссылки на себя

0 голосов
/ 09 июня 2019

На самом деле вы можете сделать! Просто добавьте новое поле типа массива в таблицу пользователей. И определите функцию запуска после вставки для таблицы пользователей.

И обновить поле массива с помощью CTE.

Я успешно использую этот подход.

...