如何使用可能具有空值的主键组合?

Ram*_*Ram 6 oracle constraints

我有两个表A和B,如下所示.

create table A
(
  A_1 varchar2(10) NOT NULL,
  A_2 varchar2(10),
  A_3 varchar2(10),
  constraint A_PK primary key (A_1,A_2)
)
TABLE A DATA
A_1      |A_2   |A_3
1111     abc     some_text1
1111     null    some_text1
1112     abc     some_text2
1113     def     some_text3

   create table B
   (
     B_1 varchar2(10) NOT NULL,
     B_2 varchar2(10),
     B_3 varchar2(10),
     constraint B_PK primary key (B_1,B_2,B_3),
     constraint B_FK foreign key (B_1,B2) references A(A_1,A_2)
   )
TABLE B DATA
B_1    | B_2    |B_3
1111    abc      text1
1111    null     text2
1111    null     text3
1111    null     text4 
Run Code Online (Sandbox Code Playgroud)

表A中的A_2列有时可以为空,但A_1和A_2的组合始终是唯一的.我需要A_2成为主键的一部分因为那时我只能将A_1和A_2引用为表B中的外键.这里的问题是主键不能为空.如何解决这个问题呢?任何回复都将受到高度赞赏

cle*_*tus 23

您可以通过不将其作为主键来解决此问题.主键不能,NULL或者,如果它们是复合主键,则不能包含NULL.改为使其成为唯一的索引.为主键创建自动编号字段.