2 messages in com.mysql.lists.mysql-esRe: consulta sobre índices| From | Sent On | Attachments |
|---|---|---|
| Gustavo Pardo | 28 Apr 2006 11:33 | |
| Gustavo Pardo | 28 Apr 2006 15:02 |
| Subject: | Re: consulta sobre índices![]() |
|---|---|
| From: | Gustavo Pardo (data...@gmail.com) |
| Date: | 04/28/2006 03:02:30 PM |
| List: | com.mysql.lists.mysql-es |
Gustavo Pardo escribió:
hola amigos, el phpMyAdmin me tira esta advertencia y no entiendo porqué:
Las claves UNICA e ÍNDICE no deben seleccionarse juntas para la columna `id_grupo`
tengo las siguientes tablas:
CREATE TABLE `grupos_usuarios` ( `id` int(10) unsigned NOT NULL auto_increment, `grupo` varchar(100) collate latin1_spanish_ci NOT NULL, `descripcion` text collate latin1_spanish_ci NOT NULL, PRIMARY KEY (`id`), KEY `grupo` (`grupo`(20)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci
CREATE TABLE `modulos` ( `id` int(10) unsigned NOT NULL auto_increment, `modulo` varchar(255) collate latin1_spanish_ci NOT NULL, PRIMARY KEY (`id`), KEY `modulo` (`modulo`(20)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci
CREATE TABLE `privilegios` ( `id` int(10) unsigned NOT NULL auto_increment, `id_grupo` int(10) unsigned NOT NULL, `id_modulo` int(10) unsigned NOT NULL, `ver` enum('SI','NO') collate latin1_spanish_ci NOT NULL default 'NO', `editar` enum('SI','NO') collate latin1_spanish_ci NOT NULL default 'NO', `insertar` enum('SI','NO') collate latin1_spanish_ci NOT NULL default 'NO', `eliminar` enum('SI','NO') collate latin1_spanish_ci NOT NULL default 'NO', PRIMARY KEY (`id`), UNIQUE KEY `grp_mod` (`id_grupo`,`id_modulo`), KEY `id_grupo_fk` (`id_grupo`), KEY `id_modulo_fk` (`id_modulo`), CONSTRAINT `privilegios_ibfk_1` FOREIGN KEY (`id_grupo`) REFERENCES `grupos_usuarios` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `privilegios_ibfk_2` FOREIGN KEY (`id_modulo`) REFERENCES `modulos` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci
en síntesis, en la tabla privilegios quiero guardar lo que le permito hacer a un determinado grupo de usuarios en un módulo determinado, por lo que en esta tabla (privilegios) defino una foreign key a grupos_usuarios y otra foreign key a modulos, hasta aquí vamos bien, el error aparece cuando además intento definir un índice UNIQUE sobre los campos id_grupo e id_modulo combinados (ya que esta combinación DEBE ser única), copio nuevamente el error:
Las claves UNICA e ÍNDICE no deben seleccionarse juntas para la columna `id_grupo`
¿realmente está mal definido ese índice UNIQUE? ¿alguna sugerencia? gracias.
la versión de MySQL es 5.0.18
saludos.
bueno, me respondo a mí mismo por si a alguno le sirve :)
UNIQUE KEY `grp_mod` (`id_grupo`,`id_modulo`) sirve para indexar las dos columnas juntas Y TAMBIÉN para id_grupo solamente, por lo tanto, no es necesario KEY `id_grupo_fk` (`id_grupo`)
concluyendo, si se tiene un índice así: KEY `index_name` (`col1`, `col2`, `col3`) me servirá para indexar: a. `col1` solamente b. `col1`, `col2` c. las tres columnas juntas
no me servirá para indexar `col3` sola, p.ej.
espero haber sido claro. saludos.
-- Gustavo Pardo Dataneu Desarrollo de Software, Sitios Web y Hosting Mail: data...@gmail.com Web: http://dataneu.com.ar/ Tel.(54)(299)489-6880 Centenario, NQN - Argentina




