Je veux profiter du nouveau partitionnement de MySQL 5.1 mais en utilisant un modèle ActiveRecord standard. Le problème que j'ai rencontré est que pour utiliser le partitionnement, la clé primaire sur la table doit inclure les colonnes utilisées dans la fonction de partitionnement. (http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html)Partition MySQL avec ActiveRecord
Maintenant, je veux avoir un champ 'id' auto-incrémentant (qui est habituellement utilisé comme clé primaire dans Rails) mais je veux partitionner en utilisant une autre colonne, dans ce cas 'task_id'. Fondamentalement, je ne veux pas utiliser les clés primaires composites dans mon application Rails. Ma question est la suivante:
Si je mets la table comme suit:
"CREATE TABLE `annotations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`task_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`value` text,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`, `task_id`),
KEY `index_annotations_on_task_id` (`task_id`),
KEY `index_annotations_on_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(task_id)(
PARTITION 1_to_5 VALUES LESS THAN (6),
PARTITION 6_to_10 VALUES LESS THAN (11),
PARTITION 11_to_15 VALUES LESS THAN (16))"
où j'ai la clé primaire composée de colonnes « id » et « task_id », et je ne fais rien spécial avec le modèle ActiveRecord, est-ce que je me prépare à des maux de tête dans le futur? Fondamentalement, je crée une table avec une clé primaire basée sur deux colonnes mais ne pas dire à ActiveRecord sur la deuxième colonne car j'ai toujours un champ d'identification auto-incrémentant - quelqu'un peut-il voir des problèmes avec cette approche?