Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Diego.
Cita:
Interbase asigna el "INTEG_10" y si creo otra restricción "check" crea "INTEG_11", ¿no se puede personalizar este nombre para poder borrarlo sin tener que disparar la excepción?
En Firebird (y supongo que en Interbase también) podés hacer:
Código SQL [-]
ALTER TABLE EJEMPLO ADD CONSTRAINT CHECK_0_6 CHECK(NIVEL BETWEEN 0 AND 6);

De ese modo luego podrás hacer:
Código SQL [-]
ALTER TABLE EJEMPLO DROP CONSTRAINT CHECK_0_6;

Saludos.

Edito: Donde, CHECK_0_6 será el alias de la restricción.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-06-2012 a las 17:04:06.
Responder Con Cita
  #2  
Antiguo 07-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A mí me gusta hacer estas cosas mediante un dominio, ejemplo:

Código SQL [-]
create domain domSiNo smallint default 0 check (value between 0 and 1); /* 0-No, 1-Si*/


create table tbConfiguracionEmpresa ( 
    Codigo domCodigoNoNulo, 
    GuardarHistoricoApuntes domSiNo, 
    primary key (Codigo));
Responder Con Cita
  #3  
Antiguo 07-06-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Gracias Casimiro

Cita:
Empezado por Casimiro Notevi Ver Mensaje
A mí me gusta hacer estas cosas mediante un dominio, ejemplo:

Código SQL [-]
create domain domSiNo smallint default 0 check (value between 0 and 1); /* 0-No, 1-Si*/


create table tbConfiguracionEmpresa ( 
    Codigo domCodigoNoNulo, 
    GuardarHistoricoApuntes domSiNo, 
    primary key (Codigo));
Gracias Casimiro, empero me nace una duda: un "domain" viene a ser algo así como un "constraint"?
Responder Con Cita
  #4  
Antiguo 07-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un dominio es más bien como un "alias", yo solo uso dominios, nunca declaro un campo por su tipo.
Por ejemplo, puedes tener un dominio 'domicilio' del tipo varchar(32) y en los campos declaras el dominio en lugar del tipo, entonces si un día quieres cambiar a varchar(64), sólo has de cambiar el dominio y automáticamente tendrás todos los campos de todas las tablas que usen el dominio 'domicilio' cambiadas a varchar(64).
Ejemplo, te pego un trozo de un script de creación de una BD:

Código SQL [-]
set sql dialect 3; 
create database "rankings.fdb" PAGE_SIZE 8192 user "SYSDBA" password "masterkey"; 

/**/ 
create domain domCodigoNoNulo integer not null; 
create domain domNombre varchar(64) character set ISO8859_1;  /* fb < 2.1 */ 
/*create domain domNombre varchar(64) character set UTF8 collate ES_ES_CI_AI default '';*/  /* fb >= 2.1 */ 
create domain domImagen blob sub_type 0; 
create domain domFecha date; 
create domain domHora time; 
create domain domFechaHora timestamp; 
create domain domComentarios blob sub_type text; 
create domain domSiNo smallint default 0 check (value between 0 and 1); /* 0-No, 1-Si*/
create domain domEstadoUsuario smallint; /* (0.sinconfirmar,1.activo,2.baja) (sinconfirmar hasta que responda el email de confirmaciﺃ٣n de alta) */ 
create domain domPuntos integer;  /* 0,1,2,3,4,5,6,7,8,9,10 */ 
create domain domLogin varchar(32); 
create domain domContrasena varchar(64); 
create domain domDescripcion varchar(256); 
create domain domEmail varchar(48); 
create domain domWeb varchar(128); 
create domain domYear integer; 
create domain domNIF varchar(16) not null; 
create domain domIP varchar(16); 
create domain domTelefono varchar(16);
create domain domWebBrowser varchar(64);  /* navegador del usuario */
create domain domSO varchar(64); /* sistema operativo del usuario */
create domain domTitulo varchar(64); /* para título de las opiniones/comentarios */
create domain domInteger integer; 
create domain domAlias varchar(16);
create domain domCaracter varchar(1);
create domain domConcepto varchar(96);
create domain domCP varchar(5);
create domain domDescripcion varchar(256);
create domain domDireccion varchar(256);
create domain domPoblacion varchar(96); 
create domain domPorcentaje double precision;
/* 
*/ 
 
create table 
tbTIPOSPROFESIONALES  
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre,      
  primary key (ID) 
); 
 
create table 
tbPAISES 
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre, 
  primary key (ID) 
); 

create table 
tbCIUDADES 
( 
  ID          domCodigoNoNulo, 
  ID_pais     domCodigoNoNulo, 
  Nombre      domNombre, 
  primary key (ID), 
  foreign key (ID_pais) references tbPAISES(ID) 
); 
 
create table 
tbESPECIALIDADES 
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre,  
  primary key (ID) 
); 
 
create table 
tbNIVELESUSUARIOS 
( 
  ID          domCodigoNoNulo, 
  Nombre      domNombre,  /* (normal,avanzado,admin,god) */ 
  primary key (ID) 
); 
   
create table 
tbAVATARES 
( 
  ID          domCodigoNoNulo, 
  Imagen      domImagen, 
  primary key (ID) 
); 
   
create table   
tbIDIOMAS 
( 
  ID        domCodigoNoNulo, 
  Idioma    domNombre,  
  primary key (ID) 
); 
 
create table 
tbPROFESIONALES 
( 
  ID                  domCodigoNoNulo, 
  ID_TipoProfesional  domCodigoNoNulo, 
  Nombre              domNombre, 
  ID_Especialidad     domCodigoNoNulo, 
  CentroTrabajo       domNombre,
  Privado             domSiNo, 
  SS                  domSiNo, 
  ID_Pais             domCodigoNoNulo, 
  ID_Ciudad           domCodigoNoNulo, 
  primary key (ID), 
  foreign key (ID_TipoProfesional) references tbTIPOSPROFESIONALES (ID), 
  foreign key (ID_Especialidad) references tbESPECIALIDADES (ID), 
  foreign key (ID_Pais) references tbPAISES (ID), 
  foreign key (ID_Ciudad) references tbCIUDADES (ID) 
); 
 
create table 
tbUSUARIOS 
( 
  ID              domCodigoNoNulo, 
  ID_NivelUsuario domCodigoNoNulo, 
  Login           domLogin,            
  Contrasena      domContrasena, 
  Nombre          domNombre, 
  Email           domEmail, 
/* [..] */     
  NIF             domNIF,   
  YearNacimiento  domYear, 
  Telefono        domTelefono, 
  ID_Avatar       domCodigoNoNulo, 
  ID_Idioma       domCodigoNoNulo, 
/* [..] */   
  ID_Pais         domCodigoNoNulo, 
  ID_Ciudad       domCodigoNoNulo, 
/* [..] */ 
  FechaHoraAlta   domFechaHora, 
  Estado          domEstadoUsuario,  /* (0.sinconfirmar,1.activo,2.baja) (sinconfirmar hasta que responda el email de confirmaciﺃ٣n de alta) */ 
/* [..] */ 
  IP              domIP,
  WebBrowser      domWebBrowser,
  SO              domSO, 
  primary key (ID), 
  foreign key (ID_NivelUsuario) references tbNIVELESUSUARIOS (ID), 
  foreign key (ID_Avatar) references tbAVATARES (ID), 
  foreign key (ID_Idioma) references tbIDIOMAS (ID), 
  foreign key (ID_Pais) references tbPAISES (ID), 
  foreign key (ID_Ciudad) references tbCIUDADES (ID)   
); 

...
Responder Con Cita
  #5  
Antiguo 07-06-2012
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Un dominio es más bien como un "alias", yo solo uso dominios, nunca declaro un campo por su tipo.
Por ejemplo, puedes tener un dominio 'domicilio' del tipo varchar(32) y en los campos declaras el dominio en lugar del tipo, entonces si un día quieres cambiar a varchar(64), sólo has de cambiar el dominio y automáticamente tendrás todos los campos de todas las tablas que usen el dominio 'domicilio' cambiadas a varchar(64).
WOW! si hubiera conocido esta práctica unos años atrás! estoy a tiempo.
Gracias.
Responder Con Cita
  #6  
Antiguo 07-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De todas formas, debes tener cuidado, por ejemplo, si tienes un campo con dominio varchar(32) y le cambias a un dominio integer, si tiene datos, firebird se quejará... y con razón
Responder Con Cita
  #7  
Antiguo 08-06-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Muchas gracias por sus respuestas

Cita:
Empezado por Casimiro Notevi Ver Mensaje
De todas formas, debes tener cuidado, por ejemplo, si tienes un campo con dominio varchar(32) y le cambias a un dominio integer, si tiene datos, firebird se quejará... y con razón
Gracias por tu explicación Casimiro, como siempre un buen tutor; a ti por tu pronta intervención marcoszorrilla y como siempre la oportuna aparición de ecfisa.

Ok, gracias amigos quedo totalmente satisfecho con la ayuda recibida!.

Muchas gracias y hasta pronto!

Última edición por Diego827 fecha: 08-06-2012 a las 06:14:44.
Responder Con Cita
  #8  
Antiguo 07-06-2012
Avatar de Diego827
Diego827 Diego827 is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 157
Poder: 14
Diego827 Va por buen camino
Gracias amigos, ahora veo

Cita:
Empezado por ecfisa Ver Mensaje
Hola Diego.

En Firebird (y supongo que en Interbase también) podés hacer:
Código SQL [-]
ALTER TABLE EJEMPLO ADD CONSTRAINT CHECK_0_6 CHECK(NIVEL BETWEEN 0 AND 6);

De ese modo luego podrás hacer:
Código SQL [-]
ALTER TABLE EJEMPLO DROP CONSTRAINT CHECK_0_6;

Saludos.

Edito: Donde, CHECK_0_6 será el alias de la restricción.
Voy a probar esto ecfisa, gracias por tu colaboración!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Limites de Firebird gmontes Firebird e Interbase 1 24-03-2008 23:08:07
Limites de Delphi walito Varios 5 16-11-2007 15:32:34
Declaracion de nuevos tipos FGarcia Varios 2 10-05-2007 20:46:21
El Ser Humano no tiene LIMITES vtdeleon La Taberna 5 26-09-2006 17:18:36
Limites de datos muli Firebird e Interbase 1 22-10-2003 17:52:04


La franja horaria es GMT +2. Ahora son las 23:17:39.


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