2016-11-10 7 views
0

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

Для этого я использовал 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 поля как ключ осколка, но не используется.

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?

ответ

1

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

+0

Спасибо, я буду создавать уникальный ключ на основе всех других уникальных ключей из кода и вставить его в качестве первичного ключа в ту же таблицу. –