В PostgreSQL вы должны придерживаться реляционного моделирования, как и в настоящее время в MySQL.
массивов PostgreSQL являются полезными, но не должны быть вашим первым выбором для моделирования данных по многим причинам:
- грубой выборки, блокировка и записи детализации для массивов;
- Недостаточная поддержка целевых мишеней (правда, по крайней мере, 9,4; 9,5, возможно, добавили поддержку массива FK, но она была отключена из-за проблем с производительностью);
- ограниченная поддержки в клиентских библиотеках и приложениях
Следует отметить, что при обновлении массива, то необходимо обновить массив всего, переписывания всего массива. Обновления на месте не могут быть выполнены из-за MVCC.
Массивы великолепны при создании сложных запросов и некоторых денормализационных задачах, где вы хотите создать материализованные представления по соображениям производительности. Они должны не быть вашим первым выбором для моделирования авторитетного хранения данных.
Канонические отображения один-ко-многим и многие-ко-многим в PostgreSQL точно так же, как и в любой реляционной базе данных:
1: м
CREATE TABLE parent (
parent_id integer primary key,
...
);
CREATE TABLE child (
child_id integer primary key,
parent_id integer not null references parent(parent_id),
...
);
м: п:
CREATE TABLE m(
m_id integer primary key,
...
);
CREATE TABLE n(
n_id integer primary key,
...
);
CREATE TABLE m_n (
m_id integer references m(m_id),
n_id integer references n(n_id),
PRIMARY KEY(m_id, n_id),
...
);
В общем случае вам не нужно использовать 'array' просто из-за отношения x-to-many, хотя '' '' '' '' конечно можно использовать разными способами. Обычно они просто соединяют их через отношения * Foreign Key *. Есть ли причина, почему это не будет работать в вашем случае? – khampson
Демонстрационная реализация модели «многие-ко-многим»: http://stackoverflow.com/questions/9789736/how-to-implement-a-many-to-many-relationship-in-postgresql/9790225#9790225 –