Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Campos Lógicos en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=59579)

KAYO 01-09-2008 18:45:26

Campos Lógicos en Firebird
 
Como se definen los campos tipos Lógicos en FireBird?

No aparece en la creacion de la tabla una opcion para campos Boolean.

Agradezco vuestra ayuda!!!

TOPX 01-09-2008 18:59:06

Traducido de The Firebird Book: A Reference for Database Developers, pág. 114:

Cita:

[sic] Firebird no tiene un tipo Booleano ("lógico").
La práctica usual es definir un dominio de un sólo caracter o SmallInt para uso genérico cuando el diseño solicite un Booleano.
La herramienta que le está dando "opciones de creación de tabla", tendrá la creación de dominios.

ninguno 01-09-2008 19:01:18

quizás algo así

Código:

CREATE DOMAIN LOGICO AS
SMALLINT
CHECK (VALUE IS NULL or VALUE = 0 OR VALUE = 1);


TOPX 01-09-2008 19:03:45

Es correcto.

maeyanes 01-09-2008 19:07:23

Hola...

En dado caso sería mejor:

Código SQL [-]
create domain BOOLEAN as
  SMALLINT DEFAULT 0
  check (VALUE in (0, 1));


Saludos...

ninguno 01-09-2008 19:11:18

Siento discrepar, pero es muy recomendable tener en cuenta el valor null, sino estás obligando a poner un valor al campo y no tiene por qué ser así. Si lo quieres hacer de esa manera, la cosa quedaría así

Código:

CREATE DOMAIN LOGICO 
AS SMALLINT
CHECK (value is null or value in (0, 1));


maeyanes 01-09-2008 19:19:32

Hola...

Si te fijas en mi ejemplo, el dominio maneja un valor predeterminado de 0, de esta forma si haces un insert y no especificas un valor para el campo que use este dominio, firebird automáticamente lo pondrá en 0. De esta forma no tienes que preocuparte por valores nulos...



Saludos...

roman 01-09-2008 21:53:30

Hola Marcos,

Aunque no soy fan de permitir valores NULL, creo que el compañero ninguno tiene razón, pues habrá quienes deseen o requieran permitir valores nulos en un campo.

// Saludos

maeyanes 01-09-2008 21:58:57

Hola...

Si, eso lo tengo muy presente...

Yo me refiero solo al caso que nos toca, un dominio que sirva para declarar campos de tipo Boolean (Lógicos), donde estos solo pueden tener dos valores, Falso o Verdadero (0 y 1 en el ejemplo). La verdad que no le veo mucho sentido permitir nulos en un campo de este tipo...



Saludos...

TOPX 01-09-2008 22:33:35

Ahí si toca como lo requiera el cliente. Porque podría estar el ejemplo de "género": Macho, Hembra e Indeterminado.

Y siendo así, entender el "lógico" que acepta nulo como "ni lo uno, ni lo otro, si no todo lo contrario".

ninguno 01-09-2008 23:41:27

Hola

Cita:

Empezado por maeyanes (Mensaje 310795)
Hola...

Si te fijas en mi ejemplo, el dominio maneja un valor predeterminado de 0, de esta forma si haces un insert y no especificas un valor para el campo que use este dominio, firebird automáticamente lo pondrá en 0. De esta forma no tienes que preocuparte por valores nulos...



Saludos...

Sólo una recomendación a la hora de hacer dominios: no hagas este tipo de limitaciones.

Si quieres hacer limitaciones, hazlas a nivel de campo de la tabla (con un Not null, haciendo un check, con un valor por defecto,....), no a nivel de dominio; puedes ahorrarte dolores de cabeza a la larga.


La franja horaria es GMT +2. Ahora son las 11:47:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi