我们的应用程序中需要创建唯一的主键,该主键取决于另一个唯一列(ERROR_CODE)的值。但是我们的应用程序位于地理活动的活动环境中(有几个活动数据库,使用另一个程序进行同步)。
因此,即使我们对此ERROR_CODE字段有唯一约束,但每个数据库都有可能为同一个ERROR_CODE使用不同PK的行。在数据库同步期间,这是一个问题,因为有一些子表将PK存储在一个DB中,而其他行包含存储在其他DB中的PK。由于ERROR_CODE的唯一约束,同步进程无法将两行都移动到每个数据库(这也不是一件好事)。
因此建议使用ERROR_CODE字段的哈希值作为PK值。
我想知道我们是否可以在oracle中定义基于函数的主键?
如果PK字段是“ID”,
“ID”应该等于ora_has(ERROR_CODE)。
是否可以像在oracle中那样定义主键?
答案 0 :(得分:0)
在Oracle 10中,你无法做到这一点,但在Oracle 11中你可以做到。您必须创建一个虚拟列,这些列也可以用作主键:
ALTER TABLE MY_TABLE ADD (ID NUMBER GENERATED ALWAYS AS (ora_has(ERROR_CODE)) VIRTUAL);
ALTER TABLE MY_TABLE ADD CONSTRAINT t_test_pk PRIMARY KEY (ID) USING INDEX;