Ir al contenido


Foto

Crear un dominio no booleano


  • Por favor identifícate para responder
11 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 junio 2013 - 03:19

En esta declaracion de Dominio


CREATE DOMAIN T_ENTIDADES AS
SMALLINT
DEFAULT 0
NOT NULL
CHECK (value in (0,1));


el valor 0 define un Cliente
el valor 1 define un Provedor

¿Como debo modificarla para que en vez de 0 y 1 sea directamente Cliente y Provedor?

Saludos!
  • 0

#2 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 junio 2013 - 03:58

¿Asi tal vez?


CREATE DOMAIN T_ENTIDADES AS
VARCHAR (9)
DEFAULT 'CLIENTE'
NOT NULL
CHECK (value in ('CLIENTE','Cliente','cliente','PROVEDOR','Provedor','provedor','PROVEEDOR','Proveedor','proveedor'));


¿Que opinan?
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 20 junio 2013 - 04:13

¿Asi tal vez?


CREATE DOMAIN T_ENTIDADES AS
VARCHAR (9)
DEFAULT 'CLIENTE'
NOT NULL
CHECK (value in ('CLIENTE','Cliente','cliente','PROVEDOR','Provedor','provedor','PROVEEDOR','Proveedor','proveedor'));


¿Que opinan?


Y que tal así

CHECK ( UPPER(value) in ( 'CLIENTE', 'PROVEDOR', 'PROVEEDOR' ));


¿Se podrá?

Digo, que tal que se les ocurra poner algo así CLIente, proveDor, PROVeedoR  *-)

Saludos
  • 0

#4 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 junio 2013 - 04:33

Aclarando:

¿UPPER es similar en funcionamiento a Uppercase?

es decir que el texto seria ¿capturado en mayusculas?
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 20 junio 2013 - 07:56

Hola Fgarcia, con todo respeto pienso que es mala idea  permitir que entren datos tan disimiles como ('CLIENTE','Cliente','cliente','PROVEDOR','Provedor','provedor','PROVEEDOR','Proveedor','proveedor'), luego cuando quieras hacer una consulta  por Cliente o por Proveedor te tocará complicarla para que abarque todas las posibles formas.

El dominio debería ser rotundamente así:


CREATE DOMAIN T_ENTIDADES AS
VARCHAR(9) CHARACTER SET ISO8859_1
DEFAULT 'CLIENTE'
CHECK (VALUE IN ('CLIENTE', 'PROVEEDOR'))
COLLATE ES_ES_CI_AI;


Luego la forma de controlar que solo entren CLIENTE y PROVEEDOR, es muy sencilla desde la aplicación, con un ComboBox o un RadioGroup.
Si lo prefieres hacer desde la base de datos, entonces utiliza un trigger para convertir los posibles valores ingresados a los exigidos por el dominio.
El siguiente trigger toma las palabras que inician con "PR" (no importa si mayúsculas o minúsculas o mezcladas) y las convierte en 'PROVEEDOR',  la entrada  'cliente' no importa como esté escrita, en cualquiera de los casos convertirá el valor entrado a mayúsculas.


CREATE OR ALTER TRIGGER TU_TABLA_BIU FOR TU_TABLA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
if (NEW.ENTIDAD STARTING WITH 'PR') then
    NEW.ENTIDAD = 'PROVEEDOR';
    NEW.ENTIDAD = UPPER(NEW.ENTIDAD);
END


Un cordial saludo
  • 0

#6 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 20 junio 2013 - 11:56

Personalmente, validaciones "tan largas" como tener que poner "cliente" o "proveedor" me parecen un poco exageradas. Con una simple C o P en el domain creo que bastaría y sería suficientemente claro

CREATE DOMAIN T_ENTIDADES AS
VARCHAR(9) CHARACTER SET ISO8859_1
DEFAULT 'CLIENTE'
CHECK (VALUE IN ('C', 'P'))
COLLATE ES_ES_CI_AI;


Al tener el coalesce ES_ES_CI_AI, la verdad es que da lo mismo que te lo ingresen en mayúsculas o en minúsculas ya que es un coalesce case insensitive.

Saludos
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 21 junio 2013 - 08:05

Saludos.

Desde mi punto de vista (siempre y cuando la solución sea un dominio) en cuanto a espacio y velocidad de procesamiento la primera opción que tenías es mas eficiente.

Entiendo que quizás para leer directamente los datos en la tabla e incluso en los Select sea más fácil de identificar quien es uno y cual es el otro, a su vez te evitaría el uso de alguna función para convertir de 0 y 1 al valor real.

Otra alternativa, que me gusta más por la flexibilidad que ofrece, es crear un mantenimiento de tipo de entidades y realizar las respectivas relaciones entre las tablas. Con esto obtienes que no tendrás que hacer modificaciones futuras para soportar nuevas entidades (tipos de entidades).

Happy Coding!!
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 21 junio 2013 - 08:15

Personalmente, validaciones "tan largas" como tener que poner "cliente" o "proveedor" me parecen un poco exageradas. Con una simple C o P en el domain creo que bastaría y sería suficientemente claro


Yo pienso igual, que no se puede en lugar de validar cadenas, se valide un índice, ahora mismo recuerdo un caso aquí en la oficina que validan que un dato siempre vaya con primer letra mayúscula y las demás minúsculas, o sea, no era más fácil hacer una tabla y validar su Id ¿?

1 para Mujeres
2 para Hombres
3 para Quimeras

etc.....

A ese paso van a querer validar que no se te pase un acento o una coma :s

Saludos
  • 0

#9 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 21 junio 2013 - 12:31

Saludos.

Desde mi punto de vista (siempre y cuando la solución sea un dominio) en cuanto a espacio y velocidad de procesamiento la primera opción que tenías es mas eficiente.

Entiendo que quizás para leer directamente los datos en la tabla e incluso en los Select sea más fácil de identificar quien es uno y cual es el otro, a su vez te evitaría el uso de alguna función para convertir de 0 y 1 al valor real.

Otra alternativa, que me gusta más por la flexibilidad que ofrece, es crear un mantenimiento de tipo de entidades y realizar las respectivas relaciones entre las tablas. Con esto obtienes que no tendrás que hacer modificaciones futuras para soportar nuevas entidades (tipos de entidades).

Happy Coding!!


Mi experiencia con BD's es casi nula, siempre jugando con proyectos. Así que esa era la idea conocer las ideas y opiniones de diversas gentes que están involucradas con BD's en forma profesional; y si, me quedo con la opción original que mostré.

Rolphy no entendí eso del "crear un mantenimiento de tipo de entidades y realizar las respectivas relaciones entre las tablas" ¿Podrias abundar un poquito mas? eso si con peras y manzanas (iba a decir que bolitas y palitos pero conociendo a estos.........)


Gracias por sus respuestas!!

(b)(b)(b)
  • 0

#10 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 21 junio 2013 - 11:54

A lo que el amigo Rolphi se refiere (corrígeme si me equivoco) es a que tengas una segunda tabla con los valores posibles (y su descripción) del "domain" y que uses una consulta sql con un inner join entre las tablas. Luego necesitarás hacer una pantallita en tu aplicación para la manipulación de esta tabla. Esta pantalla es la de mantenimiento a la que se refiere Rolphi

No se si te lo he explicado mejor o te he liado aun más jajajaja

Saludos
  • 0

#11 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 22 junio 2013 - 07:44

A lo que el amigo Rolphi se refiere (corrígeme si me equivoco) es a que tengas una segunda tabla con los valores posibles (y su descripción) del "domain" y que uses una consulta sql con un inner join entre las tablas. Luego necesitarás hacer una pantallita en tu aplicación para la manipulación de esta tabla. Esta pantalla es la de mantenimiento a la que se refiere Rolphi

No se si te lo he explicado mejor o te he liado aun más jajajaja

Saludos


Saludos.

Es exactamente a lo que me refiero.


  • 0

#12 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 22 junio 2013 - 08:22


A lo que el amigo Rolphi se refiere (corrígeme si me equivoco) es a que tengas una segunda tabla con los valores posibles (y su descripción) del "domain" y que uses una consulta sql con un inner join entre las tablas. Luego necesitarás hacer una pantallita en tu aplicación para la manipulación de esta tabla. Esta pantalla es la de mantenimiento a la que se refiere Rolphi

No se si te lo he explicado mejor o te he liado aun más jajajaja

Saludos


Saludos.

Es exactamente a lo que me refiero.


(y) (y) (y) (y)
  • 0




IP.Board spam blocked by CleanTalk.