Ver Mensaje Individual
  #5  
Antiguo 26-07-2010
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Reputación: 18
Gallosuarez Va por buen camino
Talking Opinión personal...

dant:

Según mi opinión personal, lo que estás tratando de hacer es un poco ineficiente. Mira yo lo haría de la siguiente forma:
1.- Crear mi base de datos con el siguiente juego de caracteres: ISO8859_1 (que es el juego de caracteres para la mayoría de los idiomas occidentales, incluyendo el Español, por supuesto).
2.-Crear los campos de Nombre, Apellido Paterno y Apellido Materno con el juego de caracteres mencionado arriba y utilizar el siguiente collate: ES_ES_CI_AI (Español de España, Caracter Insensitive, Accent Insentive), es decir tus campos no van a ser sensibles a mayúsculas ni minúsculas ni a los acentos. Por ejemplo, el siguiente nombre: Gerardo Suárez Trejo, sería exactamente igual a GERARDO Suarez Trejo (me explico, no importan las mayúsculas ni los acentos).
3.- Crear un campo computado con la concatenación de Apellido Paterno + Apellido Materno + Nombre (puedes calcular este campo con las valores antes capturados y es mucho mas cómodo para los usuarios).
4.- Creas un índice con el campo calculado (tu búsquedas sería de lo mas rápido que puedas imaginar, incluso puedes hacer búsquedas parciales, por ejemplo nombre_cmplto = 's', o nombre_cmplto = 'sua', etc. (la búsqueda automáticamente utilizaría el índice antes mencionados lo cual nos traería muchos beneficios en cuanto a velocidad se refiere).
5.-Creas un disparador (trigger before insert or update), y aquí haces una búsqueda para saber si existe el nombre_cmplto antes de hacer la inserción en la BD)
anexo un pequeño ejemplo que hice para una Escuela.
Código SQL [-]
CREATE OR ALTER trigger alumnos_biu0 for alumnos
active before insert or update position 0
AS
BEGIN
  IF(NEW.ID IS NULL) THEN
    NEW.ID = GEN_UUID();
  /* Quita espacios en blanco al inicio y al final del campo */
  NEW.NOMBRE = TRIM(NEW.NOMBRE);
  /* Quita espacios en blanco y se asegura que los Apellidos no contengan un valor NULL */
  NEW.A_PATERNO = COALESCE(TRIM(NEW.A_PATERNO), '');
  NEW.A_MATERNO = COALESCE(TRIM(NEW.A_MATERNO), '');
  /* No permite que haya Alumnos repetidos */
  IF (EXISTS(
    SELECT 1
    FROM ALUMNOS
    WHERE NEW.ID <> ID AND NEW.NOMBRE_CMPLTO = NOMBRE_CMPLTO)) THEN
      EXCEPTION ALUMNO_REPETIDO;
END

Saludos,
Gerardo Suárez Trejo

PD. No dejes de platicarnos como te fue...
Responder Con Cita