oracle 基于非空值的条件主键

ars1skjm  于 2023-01-12  发布在  Oracle
关注(0)|答案(1)|浏览(111)

我有一个具有复合主键的表:

CREATE TABLE tb (
        it_service               VARCHAR2(200),
        hostname                 VARCHAR2(255),
        sw_name                  VARCHAR2(200 CHAR),
        product_home             VARCHAR2(500),
        product_home_ods         VARCHAR2(500),
        instance_name            VARCHAR2(255),
        eg_status                VARCHAR2(10),
       );

ALTER TABLE tb ADD (
    CONSTRAINT pk_tb PRIMARY KEY (              hostname,
                                                instance_name,
                                                product_home,
                                                product_home_ods,  
                                                it_service,
                                                sw_name )
);

问题是当我插入到这个表中时,product_home列中的数据对于product_home_ods包含数据的行是空的,同样的情况也适用于product_home_ods,表中包含数据的行对于product_home是空的。
示例:

product_home product_home_ods
java         null
python       null
null         windows
null         windows_server

是否可以根据这些列的条件创建主键?我知道主键不应该包含null值,但不确定解决这个问题的最佳方法。

nfg76nw0

nfg76nw01#

如果更改为这种模型,product_home将永远不会为NULL,ods_flag将指示是否应将其解释为product_home或product_home_ods,您可以在视图中执行此操作以获取与原始表相同的数据。

CREATE TABLE tb (
        it_service               VARCHAR2(200),
        hostname                 VARCHAR2(255),
        sw_name                  VARCHAR2(200 CHAR),
        product_home             VARCHAR2(500),
        ods_flag                 NUMBER(1,0),
        instance_name            VARCHAR2(255),
        eg_status                VARCHAR2(10),
       );

ALTER TABLE tb ADD (
    CONSTRAINT pk_tb PRIMARY KEY (              hostname,
                                                instance_name,
                                                product_home,
                                                ods_flag,  
                                                it_service,
                                                sw_name )
);

(As只要原始表的product_home和product_home_ods不是外键)

相关问题