db2仓库MDC外键关系

时间:2018-10-11 13:14:15

标签: sql db2 foreign-keys relational-database ibm-cloud

我有一个包含两个表TABLE_A和TABLE_B的Db2数据库。

这就是我创建TABLE_A(按维度组织)的方式:

CREATE TABLE SCHEMA_NAME.TABLE_A (
COL1 CHAR(10) NOT NULL,
COL2 INT NOT NULL,
COL3 INT NOT NULL)
ORGANIZE BY DIMENSIONS (COL1, COL2);

这是我创建TABLE_B(按行组织)的方式:

CREATE TABLE SCHEMA_NAME.TABLE_B (
COL1 CHAR(10) NOT NULL,
COL2 INT NOT NULL,
COL3 INT NOT NULL)
ORGANIZE BY ROW;

我想在表之间创建父子关系,其中COL1作为TABLE_A中的主键,而作为TABLE_B中的外键。

问题是我无法在MDC(多维集群)表TABLE_A(主键)中创建COL1。

带有以下语句:

ALTER TABLE "PARTITIONING_TEST"."TABLE_A" ADD CONSTRAINT "TABLE_A_PK" PRIMARY KEY
("COL1") ENFORCED;

我得到了错误:

The primary key or a unique key identified by "TABLE_A_PK" is a subset of the columns in the ORGANIZE BY clause.. SQLCODE=-20188, SQLSTATE=429BE, DRIVER=4.22.36

而且由于我无法将COL1用作TABLE_A的主键,所以无法使其成为TABLE_B的外键。

如何创建这种关系?

1 个答案:

答案 0 :(得分:0)

您真的不想在主键上使用MDC。幸运的是,DB2阻止您这样做,因为错误消息说明了

All the columns in a primary or unique key are included in the table's
ORGANIZE BY clause. This is not allowed, since each block of pages in
the table would contain just one row, wasting all the rest of the space
in the block.

您通常会在诸如SALES_DATE或(如果您没有那么多销售)SALES_YEAR_MONTH以及SALES_REGION等。即低可伸缩性列,当然也不是您的主键。我认为该手册很好地解释了MDC表。 https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.partition.doc/doc/c0022241.html