Creación de indices con triggers

Diseñe una base de datos donde utilizo catálogos, dentro de los cuales existen marcas, modelos, familias, etc. ¿Y quisiera saber como agregar un indice automático cada vez que se inserte un registro? Esto para evitar que el usuario teclee el id de cada registro, y así evitar el envío de "clave duplicada", lo pienso hacer mediante un trigger pero el trigger se dispara hasta después de la sentencia sql, y me envía el error de que no puede haber valores nulos en la clave primaria, traté de usar la instrucción instead of, pero no me funciono...
¿Qué me sugiere hacer?

2 respuestas

Respuesta
1
Creo que estas confundido con los términos y los usos de los indices y de los triggers.
El indice se crea para ordenar la información registrada en una tabla.
El trigger se utiliza para verificar información o realizar procesos antes de insertar, modificar o borrar los datos.
Lo que tienes que hacer es realizar un proceso de generación de claves antes de que se registre en forma física la información dentro de tu tabla...
Yo realizo una inserción consecutiva por año de acuerdo a un serie numérica de números de folio y todo sin problemas...
Quizá no me explique bien, o yo soy el que no comprendí lo que me escribiste, la palabra "indice" la utilizo para describir mi llave primaria, no se si represente lo mismo una llave primaria que un indice, ya que no he utilizado "indices", me refiero a un consecutivo para cada registro de las tablas, ¿o en el caso que me comentas si requiero realizar un procedimiento almacenado que me haga esa función de generación? si es así, ¿Qué tip me darías para realizarlo?
Gracias por tu ayuda!
Perdón por lo preguntón
Casi, casi, coordinamos.
La llave primaria no es un indice es un control que usas dentro de una tabla para evitar duplicidad de datos, según te convenga, los indices son medios de búsqueda de información, algo como un diccionario, todo ordenado por algo para encontrar un algo más rápido.
Para ese tipo de procesos, siempre uso un campo numérico y realizo una búsqueda desde una transacción, un objeto que te permite bloquear la tabla para que nadie más agregue, borre o haga algo en la tabla, para obtener el número máximo.
Algo como, select max(numerofolio) from mitabla where micondicion
Y de ahí lo incremento en uno o directamente en el select.
Después inserto los datos, confirmo la transacción y termino el proceso...
Así es, ya ahora que hablamos del mismo tema si nos comprendemos. De hecho utilizo el max para que me de el valor más grande y a ese sumarle 1, yo lo estaba haciendo desde el trigger pero no me ha funcionado; en este caso me recomiendas que haga esa validación desde la propia transacción del insert verdad, Ok. Voy a dar esta idea y creo que así si voy a poder resolver este detalle, muchas gracias, me han servido de mucho sus consejos!
Saludos!
Solo para comentarle que efectivamente, ya me funcionó la instrucción desde la propia consulta y sin utilizar los triggers, muchas gracias por sus tips...
Saludos
Ok, es bueno tener retroalimentación...
Un favor, puedes cerrar la pregunta dándole la calificación que desees...
Respuesta

Para crear un índice automático para cada registro insertado en una base de datos sin que el usuario tenga que proporcionar el ID y evitando problemas de duplicación de claves, lo mejor es utilizar una secuencia (sequence) en combinación con un trigger en bases de datos como PostgreSQL, Oracle o SQL Server.
Snow Rider

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas