Db2 Warehouse MDC по внешним ключам - PullRequest
0 голосов
/ 11 октября 2018

У меня есть база данных Db2 с двумя таблицами, TABLE_A и TABLE_B.

Вот как я создаю 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 (ORGANIZED BY ROW):

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.

Проблемаявляется то, что я не могу сделать COL1 в таблице MDC (многомерной кластеризации), TABLE_A, первичный ключ.

С оператором:

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 голосов
/ 11 октября 2018

Вы действительно не хотели бы 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.

Обычно вы будете использовать MDC для таких столбцов, как, например, 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

...