WTF?!

Constantemente estamos incorporando al Data Warehouse nuevas áreas que corresponden a bases de datos ‘OLTP’, normalmente Oracle.

Para comprender el esquema origen (Oracle) y para diseñar un modelo de destino (Teradata) solemos pedir que nos envíen los ‘scripts‘ con los DDL’s de creación de los objetos. Uno ya está acostumbrado a cosas como ver columnas definidas como VARCHAR2(1) (¿Alguien podría explicarme qué sentido tiene una columna VARCHAR2(1)?) Pero a veces mi capacidad de asombro se ve desbordada.

Recientemente he recibido dos ‘perlas’.

La primera es algo casi metafísico:

CREATE TABLE “XXXXXX”.”TB_XXXXXX”
(

“EMAIL” VARCHAR2(50 BYTE) DEFAULT NULL NOT NULL ENABLE,

);

O sea, defino una columna ‘NOT NULL’ y le asigno un valor por defecto ‘NULL’.

Esta otra tampoco tiene desperdicio:

Recibimos un ‘script’ SQL de creación de un esquema que consiste únicamente en CREATE TABLEs y ALTER TABLEs…

CREATE TABLE YYYYYY.YYYYY (

)
LOGGING;

ALTER TABLE YYYYYY MODIFY CODIGO VARCHAR2(5);

COMMIT;

…y la última sentencia es un COMMIT ! (Debe de ser por si acaso, para asegurar y tal…)

¿Alguien ha oído hablar de los ‘commit’ implícitos que cada orden DDL provoca en Oracle?

Pues esto es un poco de mi día a día, lidiando con proyectos cuyas bases de datos parecen haber sido diseñadas por alguien que sabe de bases de datos lo mismo que yo de física experimental…

Saludos.

Carlos.

Anuncios

2 respuestas a WTF?!

  1. Óscar de la Torre dice:

    Buenas Carlos,
    Hacía tiempo que no me pasaba por aquí como verás 🙂
    Sobre el tema de VARCHAR2(1), ¿cuál es el motivo para no usarlo? ¿Qué beneficio aporta CHAR(1) sobre VARCHAR2(1)? Mi argumento a favor es que así no tienes excepciones, en todos los casos usas VARCHAR2. Pero vamos, que seguro que existe alguna razón que se me escapa.

    • CarlosAL dice:

      Buenas, Óscar!

      Las razones que tengo contra el uso de VARCHARs(1) son de dos tipos:

      1.- Filosófica 😉 Si VARCHAR significa ‘cadenas de caracrteres de longitud variable’, ¿qué longitud variable puede tener un VARCHAR(1)? Uno o… uno. Y si no, es nulo. (Pero como siempre: lo peor es que lo suele utilizar la gente que no sabe lo que está haciendo)

      2.- Práctica. Los VARCHARs utilizan bytes adicionales para indicar la longitud de la cadena… ¡que sólo puede ser 1! Entonces, ¿Para qué gastar espacio de forma tan absurda?
      (En Teradata, además, impedía el uso del COMPRESS, al menos hasta que llegó la versión 14. También podríamos discutir algo sobre el almacenamiento de las CHAR y VARCHAR2 en Oracle, aunque casi se me ha olvidado…).

      Ambas son razones de un ‘grumpy old man’ que ha visto demasiado en el mundo de las bases de datos…

      Saludos.

      Carlos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: