ORACLE:定义外键约束时使用静态值

时间:2016-12-08 14:43:21

标签: c# oracle enums foreign-keys

如何在ORACLE中定义这样的外键约束:

ALTER TABLE TEST_STORES ADD CONSTRAINT FK_STORE_TYPE 
    FOREIGN KEY ("StoreTable", STORE_TYPE) REFERENCES TEST_ENUMERATIONS (TABLE, VALUE)
/

我想在一个表中组合几个表的所有Enum值。 为了创建外键,我还需要检查枚举的类型,因为单独的值不是唯一的。

我需要这样,所以我可以在我的程序中将Store_Type定义为枚举(C#),但同时我想确保数据库值都是有效的。

例如:

TEST_STORE表:

| ID        | ...        | STORE_TYPE 
|-----------|------------|------------
| 324234    |            | 0     
| 324235    |            | 0       
| 324236    |            | 1  

TEST_ENUMERATIONS表:

| ID        | TABLE        | VALUE      | NAME        
|-----------|--------------|------------|-------------
| 567234    | StoreTable   | 0          | NormalStore
| 567235    | StoreTable   | 1          | SpecialStore
| 567236    | AnotherTable | 0          | AnotherType

2 个答案:

答案 0 :(得分:2)

尝试在TEST_STORES上创建一个值为'StoreTable'的虚拟列,并使用虚拟列作为外键中的第一列。

ALTER TABLE TEST_STORES ADD (ENUM_TABLE AS 'StoreTable');

ALTER TABLE TEST_STORES ADD CONSTRAINT FK_STORE_TYPE 
    FOREIGN KEY (ENUM_TABLE, STORE_TYPE) REFERENCES TEST_ENUMERATIONS (TABLE, VALUE)

答案 1 :(得分:0)

似乎你需要:

ALTER TABLE TEST_STORES ADD CONSTRAINT FK_STORE_TYPE 
    FOREIGN KEY (NAME, STORE_TYPE) REFERENCES TEST_ENUMERATIONS (TABLE, VALUE)
/

您还需要test_enumerations(table,value)上的唯一键。