小编Lar*_*row的帖子

PostgreSQL可以对数组元素有唯一性约束吗?

我正在尝试为当前在LDAP存储中的主机数据提出PostgreSQL架构.部分数据是机器可以拥有的主机名列表,该属性通常是大多数人用来查找主机记录的关键.

我想将这些数据移动到RDBMS的一件事是能够在hostname列上设置唯一性约束,以便无法分配重复的主机名.如果主机只能有一个名称,这将很容易,但由于它们可以有多个名称,因此它更复杂.

我意识到这样做的完全规范化的方法是让一个主机名表的外键指向hosts表,但是我想避免让每个人都需要为最简单的查询做连接:

select hostnames.name,hosts.*
  from hostnames,hosts
 where hostnames.name = 'foobar'
   and hostnames.host_id = hosts.id;
Run Code Online (Sandbox Code Playgroud)

我认为使用PostgreSQL数组可以为此工作,它们肯定使简单的查询变得简单:

select * from hosts where names @> '{foobar}';
Run Code Online (Sandbox Code Playgroud)

但是,当我在hostnames属性上设置唯一性约束时,它当然会将整个名称列表视为唯一值而不是每个名称.有没有办法让每个名称在每一行都是唯一的?

如果没有,有没有人知道另一种更有意义的数据建模方法?

arrays postgresql database-design ldap unique-constraint

19
推荐指数
2
解决办法
6956
查看次数