MemSQL — суррогатный ключ в качестве основного и разные уникальные ключи одновременно при создании таблицы

У меня возникла ситуация, когда мне нужно иметь суррогатный ключ (id) вместо составного ключа (4 поля, объединенные для уникальности: project_id, dataset_id, table_id, view_name), чтобы легко ссылаться на него в других таблицах.

Поэтому для этого я использовал поле id в качестве первичного ключа и другие 4 поля, упомянутые выше, в качестве уникальных ключей. Это разрешено в MySQL, но не в MemSQL.

Error Code: 1895. The unique key named: 'project_id' must contain all columns specified in the primary key when no shard key is declared

Поэтому я добавил поле id в качестве ключа Shard, но бесполезно.

CREATE TABLE `table_access_details` (
  `id` integer primary key,
  `project_id` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `dataset_id` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  `table_id` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  `view_name` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL ,
  `upload_id` decimal (14,0) DEFAULT NULL,
  `modified_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `created_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  #SHARD KEY (`id`),
  unique(`project_id`,`dataset_id`,`table_id`,`view_name`)
);

Как я могу преодолеть эту ситуацию в MemSQL?


person Marlon Abeykoon    schedule 10.11.2016    source источник


Ответы (1)


Итак, вам нужен уникальный ключ (id), а также уникальный ключ (project_id, dataset_id, table_id, view_name)? Это невозможно в сегментированной таблице в memsql — уникальный ключ не может быть эффективно применен к сегментам. Ваши варианты: не используйте оба уникальных ключа или сделайте таблицу справочной.

person Jack Chen    schedule 11.11.2016
comment
Спасибо, я создам уникальный ключ на основе всех других уникальных ключей из кода и вставлю его в качестве первичного ключа в ту же таблицу. - person Marlon Abeykoon; 15.11.2016