Я пытаюсь придумать схему PostgreSQL для данных хоста, которые в настоящее время хранятся в хранилище LDAP. Часть этих данных - это список имен хостов, которые может иметь машина, и этот атрибут обычно является ключом, который большинство людей использует для поиска записей хоста.
Одна вещь, которую я хотел бы отключить от перемещения этих данных в RDBMS, - это возможность установить ограничение уникальности в столбце имени хоста, чтобы нельзя было назначить дублирование имен хостов. Это было бы легко, если бы хосты могли иметь только одно имя, но поскольку они могут иметь более одного, это более сложно.
Я понимаю, что полностью нормализованный способ сделать это состоял бы в том, чтобы таблица хостов с внешним ключом указывала обратно на таблицу хостов, но я бы хотел, чтобы все не нуждались в объединении даже для самого простого запроса
select hostnames.name,hosts.*
from hostnames,hosts
where hostnames.name = 'foobar'
and hostnames.host_id = hosts.id;
Я полагал, что для этого могут работать массивы PostgreSQL, и они, безусловно, упрощают простые запросы:
select * from hosts where names @> '{foobar}';
Когда я устанавливаю ограничение уникальности для атрибута hostnames, он, конечно, рассматривает весь список имен как уникальное значение вместо каждого имени. Есть ли способ сделать каждое имя уникальным для каждой строки?
Если нет, знает ли кто-нибудь другой подход к моделированию данных, который имел бы смысл?