Может ли PostgreSQL иметь ограничение уникальности для элементов массива?

Я пытаюсь придумать схему PostgreSQL для данных хоста, которые в настоящее время находятся в хранилище LDAP. Часть этих данных представляет собой список имен хостов, которые может иметь машина, и этот атрибут обычно является ключом, который большинство людей используют для поиска записей хоста.

Одна вещь, которую я хотел бы избежать при перемещении этих данных в СУБД, - это возможность установить ограничение уникальности в столбце имени хоста, чтобы нельзя было назначать повторяющиеся имена хостов. Это было бы легко, если бы хосты могли иметь только одно имя, но, поскольку у них может быть больше одного имени, это сложнее.

Я понимаю, что полностью нормализованный способ сделать это - иметь таблицу имен хостов с внешним ключом, указывающим обратно на таблицу хостов, но я бы хотел, чтобы всем не приходилось выполнять соединения даже для простейшего запроса. :

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, он, конечно, обрабатывает весь список имен как уникальное значение вместо каждого имени.Есть ли способ вместо этого сделать каждое имя уникальным для каждой строки?

Если нет, знает ли кто-нибудь другой подход к моделированию данных, который имел бы больше смысла?

19
задан Erwin Brandstetter 15 November 2015 в 22:38
поделиться