Не скажется ли здесь производительность, когда вы выполняете маршалинг / демаршаллинг?
Лично я не думаю, что это стоит затраченных усилий, и то, что вы пытаетесь сделать, кажется неясным.
На самом деле это выглядит как сопоставление «многие ко многим», а не «многие к одному», так как нет кода, который запрещает принадлежность категории к более чем одной странице, конечно, вы хотите что-то вроде:
create table categories_pages (
category_id integer not null references categories(id),
page_id integer not null references pages(id),
primary_key(category_id, page_id)
);
со значением has и принадлежит многим с обеих сторон или has_many: сквозным с обеих сторон (в зависимости от того, хотите ли вы хранить больше вещей).