我有一张带有复合主键的表:
Table "account.enum"
Column | Type | Modifiers
-----------+------------------------+-----------
classname | character varying(256) | not null
name | character varying(64) | not null
active | boolean | not null
Indexes: "enum_pkey" PRIMARY KEY, btree (classname, name)
值:
classname | name | active
--------------+--------+--------
CURRENCY | EUR | t
CURRENCY | USD | t
MUTATIONTYPE | CREDIT | t
MUTATIONTYPE | DEBET | t
另一个表帐户使用此表:
Table "account.mutation"
Column | Type | Modifiers
-----------------+------------------------+-------------------------------------------------------
id | bigint | not null default nextval('mutation_id_seq'::regclass)
accountnumber | character varying(9) | not null
interestdate | date | not null
balancebefore | numeric(10,2) | not null
balanceafter | numeric(10,2) | not null
transactiondate | date | not null
amount | numeric(10,2) | not null
description | character varying(512) | not null
ordernumber | smallint | default (-1)
mutationtype | character varying(64) |
currency | character varying(64) |
我想添加外键约束(用于突变类型和货币):
alter table mutation add constraint FK_mutationtype foreign key('MUTATIONTYPE', mutationtype) references enum(classname, name);
alter table mutation add constraint FK_currency foreign key('CURRENCY', currency) references enum(classname, name);
但是不接受字符串文字。 我究竟做错了什么?在postgres中我想要的是什么?
答案 0 :(得分:0)
您无法执行此操作,因为外键只能在列上定义,而不能在文字driver.findElement(By.xpath("")).getText();
等表达式上定义。
您可以在'MUTATIONTYPE'
中引入一个总是设置为mutation_class
的{{1}}列,但这听起来很浪费,多余且愚蠢。
我认为你应该通过为不同的枚举设置不同的查找表来解决问题,然后难度就会消失,从关系角度看整个设计看起来更合理。