Как добавить кластер на составной ключ? - PullRequest
1 голос
/ 03 мая 2020

Я создал кластер

create cluster abc_clus
(abc_key int)
;

, а затем создал индекс на основе этого кластера

create index abc_clus_idx
on cluster abc_clus;

Я попытался добавить этот кластер в эти 4 таблицы для комплекса join

 create table number1
(
    dateofbirth date,  
    Time timestamp(0), 
    IDnumber int not null,
    class varchar(7) not null, 
primary key (dateofbirth, Time, class))
cluster abc_clus(class);

и

  create table number2(
    tutornumber int not null,
    forename varchar2(20) not null,
 constraint number2 primary key (tutornumber))
       cluster abc_clus(tutornumber);

и

create table number3
(
constraint number3 primary key (Roomnumber),
Roomnumber int not null, 
xyz varchar(20))
cluster abc_clus(Roomnumber3);

и

create table number4
(
constraint class_pk primary key (classnumber),
classnumber int not null)
 cluster abc_clus(classnumber);

Однако, когда я пытаюсь это сделать, Я получаю эту ошибку:

ORA-01753: определение столбца несовместимо с определением кластеризованного столбца

Мне интересно, как правильно добавить кластер на составной ключ: имя, фамилия, адрес.

Я использую SQL плюс.

Спасибо

1 Ответ

1 голос
/ 03 мая 2020

Столбец таблицы должен иметь тот же тип данных, что и столбец кластера. В вашем примере это работает нормально:

create table test1 (
  id int
) cluster abc_clus(id);
Table TEST1 created.

Даже составной ключ работает, если тип данных соответствует:

create table test2 (
  a int,
  b int,
  primary key(a, b)
) cluster abc_clus(a);
Table TEST2 created.

Однако, если тип данных отличается, вы получите сообщение об ошибке :

create table test3 (
  vc varchar2(7)
) cluster abc_clus(vc);
ORA-01753: column definition incompatible with clustered column definition

И тип данных должен быть точно таким же, даже int и number несовместимы:

create table test4 (
  n NUMBER
) cluster abc_clus(n);
ORA-01753: column definition incompatible with clustered column definition

РЕДАКТИРОВАТЬ:

Вы может даже иметь составные кластеры:

создать кластер idc_clus (i int, d date);

создать индекс idc_clus_idx для кластера idc_clus;

создать таблицу test5 (i int, d дата, первичный ключ (i, d)) кластер idc_clus (i, d);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...