我想添加一个约束来检查相关表中的值.
我有3张桌子:
CREATE TABLE somethink_usr_rel (
user_id BIGINT NOT NULL,
stomethink_id BIGINT NOT NULL
);
CREATE TABLE usr (
id BIGINT NOT NULL,
role_id BIGINT NOT NULL
);
CREATE TABLE role (
id BIGINT NOT NULL,
type BIGINT NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
(如果你想让我对FK施加约束,请告诉我.)
我想补充一个约束somethink_usr_rel,检查type中role("两个表走"),例如:
ALTER TABLE somethink_usr_rel
ADD CONSTRAINT CH_sm_usr_type_check
CHECK (usr.role.type = 'SOME_ENUM');
Run Code Online (Sandbox Code Playgroud)
我尝试用JOINs 做但没有成功.知道如何实现它吗?
postgresql database-design referential-integrity constraints foreign-keys
我正在尝试为当前在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属性上设置唯一性约束时,它当然会将整个名称列表视为唯一值而不是每个名称.有没有办法让每个名称在每一行都是唯一的?
如果没有,有没有人知道另一种更有意义的数据建模方法?
我想在表上添加字段级验证.有一个名为"account_number"的字段,该字段应始终通过"luhn"检查.我发现了一个名为"luhn_verify"的功能似乎正常工作(谷歌如果你感兴趣的话).它返回一个布尔值.我的问题是:
在PostgreSQL中使用触发器进行此验证与检查约束是否有任何主要的性能优势.
附加信息:
免责声明:
我觉得这可能已经得到了解答,但我似乎找不到明确的答案.如果是,请标记为重复并参考原始问题/答案.
可能是dba板的更好问题.
postgresql triggers database-design check-constraints postgresql-9.1