I have a table that has a composite primary key:
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 ) );
The problem is that when I insert into this table, the data from the product_home
column is null for the rows where product_home_ods
has data. The same applies product_home_ods
, the rows where that table contain data are null for product_home
.
Example:
product_home product_home_ods java null python null null windows null windows_server
Is it possible to create a primary key based on the condition of these columns ? I understand a primary key should not contain null
values, but unsure about the best way to tackle this problem.
Advertisement
Answer
And changing to this model ? product_home will never be NULL and ods_flag will indicate if it should be interpreted a product_home or product_home_ods, something you can do in a view to get back the same data as your original table.
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 long as product_home and product_home_ods of your original table are not foreign keys)