Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema al crear una llave primaria (https://www.clubdelphi.com/foros/showthread.php?t=90391)

MALBOTO22 30-05-2016 05:51:46

Problema al crear una llave primaria
 
Buenas noches, agradezco su colaboración para determinar que puedo estar haciendo mal o para saber si existe alguna restricción para crear llaves primarias con campos smallint.

Cree una base de datos con la siguiente estructura

Código:

CREATE DATABASE 'localhost:C:\BDSIDUTEC\SIDUTEC3.fdb'
  USER 'SYSDBA' PASSWORD '**********'
  PAGE_SIZE 4096
  DEFAULT CHARACTER SET ISO8859_1;
 
  /* Roles */
  CREATE ROLE RDB$ADMIN;
 
  /* Domains */
  CREATE DOMAIN CAD_CORTA AS
    CHAR(20);
  CREATE DOMAIN CAD_LARGAS AS
    VARCHAR(255);
  CREATE DOMAIN CAD_MEDIANA AS
    CHAR(40);
  CREATE DOMAIN CARACTER AS
    CHAR;
  CREATE DOMAIN ENT_CORTO AS
    SMALLINT [0:32767];
  CREATE DOMAIN ENT_LARGO AS
    INTEGER;
  CREATE DOMAIN NUM_DOC AS
    BIGINT
    NOT NULL;
 
  /* Tables */
  CREATE TABLE TIPOS_IDENTIFI (
    COD_TIP_IDE  ENT_CORTO NOT NULL,
    NOM_IDENTI  CAD_MEDIANA NOT NULL
  ) ;
  COMMIT;
 
  /* Datos por tabla  */

Intente crear una llave primaria cuando cree la tabla pero no me lo permitio, luego intente adicionar la llave primaria con el siguiente comando

Código:

ALTER TABLE TIPOS_IDENTIFI ADD CONSTRAINT PK_COD_TIP_IDE PRIMARY KEY (COD_TIP_IDE);
No acepta el commando y genera el siguiente error:

Código:

Engine Error (code = 335544351):
  unsuccessful metadata update.
  attempt to index array column in index PK_COD_TIP_IDE.
 
  SQL Error (code = -607):
  This operation is not defined for system tables.

Para descartar un error en la sintaxis del comando ingrese el mismo código para el campo NOM_IDENTI y si se creo la llave primaria.

Código:

ALTER TABLE TIPOS_IDENTIFI ADD CONSTRAINT PK_COD_TIP_IDE PRIMARY KEY (NOM_IDENTI);
Ante esto me agradaria saber si es que los tipos de datos smallint tienen alguna restricción para crear las llaves primarias o los dominios pueden estar generando algún problema?

Mil gracias por la ayuda que me puedan brindar, estoy trabajando con Firebird 2.5.1., Firebird Maestro 14 y Windows 7 Profesional de 32 bits.

Casimiro Notevi 30-05-2016 09:18:34

No sé si es algo nuevo, pero nunca había visto ese array:
CREATE DOMAIN ENT_CORTO AS SMALLINT [0:32767];
Lo normal:
CREATE DOMAIN ENT_CORTO AS SMALLINT;


Delphius 30-05-2016 13:44:42

1. Si quieres declarar un array en firebird (aunque no es usual, y hasta sus propios desarrolladores desaconsejan su uso) la cosa es: Tipo [tamaño] mientras que tu haces Tipo [0:tamaño]

2. Tener un array como clave primaria no es legal.
3. El error justamente te dice que no está permitido.

4. Lee la Release Notes y la documentación de Firebird.

rastafarey 30-05-2016 14:22:15

Por lógica una clave primaria deber unica, y un arreglo rompe esa regla.

Enviado desde mi SM-G900H mediante Tapatalk

MALBOTO22 30-05-2016 17:57:46

Mil gracias por la colaboración, efectivamente el error fue mio, al crear el dominio le defini el arreglo y le puse los limites que aparecen en la definición.

Ya corregi borrando el dominio y volviendo a crearlo sin el arreglo y los limites ingresados.


La franja horaria es GMT +2. Ahora son las 19:50:12.

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