Sei sulla pagina 1di 4

Crear la base de datos

Una base de datos en un sistema relacional est compuesta por un conjunto de tabla s, que corresponden a las relaciones del modelo relacional. En la terminologa usa da en SQL no se alude a las relaciones, del mismo modo que no se usa el trmino at ributo, pero s la palabra columna, y no se habla de tupla, sino de lnea. A continu acin se usarn indistintamente ambas terminologas, por lo que tabla estar en lugar de relacin, columna en el de atributo y lnea en el de tupla, y viceversa. Prcticamente, la creacin de la base de datos consiste en la creacin de las tablas q ue la componen. En realidad, antes de poder proceder a la creacin de las tablas, normalmente hay que crear la base de datos, lo que a menudo significa definir un espacio de nombres separado para cada conjunto de tablas. De esta manera, para una DBMS se pueden gestionar diferentes bases de datos independientes al mismo t iempo sin que se den conflictos con los nombres que se usan en cada una de ellas . El sistema previsto por el estndar para crear los espacios separados de nombres consiste en usar las instrucciones SQL "CREATE SCHEMA". A menudo, dicho sistema no se usa (o por lo menos no con los fines y el significado previstos por el es tndar), pero cada DBMS prev un procedimiento propietario para crear una base de da tos. Normalmente, se ampla el lenguaje SQL introduciendo una instruccin no previst a en el estndar: "CREATE DATABASE". La sintaxis empleada por PostgreSQL, pero tambin por las DBMS ms difundidas, es la siguiente: CREATE DATABASE nombre_base de datos Con PostgreSQL est a disposicin una orden invocable por shell Unix (o por shell de l sistema usado), que ejecuta la misma operacin: createdb nombre_base de datos Para crear nuestra base de datos bibliogrfica, usaremos pues la orden: createdb biblio Una vez creada la base de datos, se pueden crear las tablas que la componen. La instruccin SQL propuesta para este fin es: CREATE TABLE nombre_tabla ( nombre_columna tipo_columna [ clusula_defecto ] [ vnculos_de_columna ] [ , nombre_columna tipo_columna [ clusula_defecto ] [ vnculos_de_columna ] ... ] [ , [ vnculo_de tabla] ... ] ) nombre_columna: es el nombre de la columna que compone la tabla. Sera mejor no ex agerar con la longitud de los identificadores de columna, puesto que SQL Entry L evel prev nombres con no ms de 18 caracteres. Consltese, de todos modos, la documen tacin de la base de datos especfica. Los nombres tienen que comenzar con un carcter alfabtico. tipo_columna: es la indicacin del tipo de dato que la columna podr contener. Los p rincipales tipos previstos por el estndar SQL son: CHARACTER(n) Una cadena de longitud fija con exactamente n caracteres. CHARACTER se puede abreviar con CHAR CHARACTER VARYING(n) Una cadena de longitud variable con un mximo de n caracteres. CHARACTER VARYI NG se puede abreviar con VARCHAR o CHAR VARYING.

INTEGER Un nmero estero con signo. Se puede abreviar con INT. La precisin, es decir el tamao del nmero entero que se puede memorizar en una columna de este tipo, depend e de la implementacin de la DBMS en cuestin. SMALLINT Un nmero entero con signo y una precisin que no sea superior a INTEGER. FLOAT(p) Un nmero con coma mvil y una precisin p. El valor mximo de p depende de la imple mentacin de la DBMS. Se puede usar FLOAT sin indicar la precisin, empleando, por t anto, la precisin por defecto, tambin sta dependiente de la implementacin. REAL y DO UBLE PRECISION son sinnimo para un FLOAT con precisin concreta. Tambin en este caso , las precisiones dependen de la implementacin, siempre que la precisin del primer o no sea superior a la del segundo. DECIMAL(p,q) Un nmero con coma fija de por lo menos p cifras y signo, con q cifras despus d e la coma. DEC es la abreviatura de DECIMAL. DECIMAL(p) es una abreviatura de DE CIMAL(p,0). El valor mximo de p depende de la implementacin. INTERVAL Un periodo de tiempo (aos, meses, das, horas, minutos, segundos y fracciones d e segundo). DATE, TIME y TIMESTAMP Un instante temporal preciso. DATE permite indicar el ao, el mes y el da. Con TIME se pueden especificar la hora, los minutos y los segundos. TIMESTAMP es la combinacin de los dos anteriores. Los segundos son un nmero con coma, lo que permi te especificar tambin fracciones de segundo. clusula_defecto: indica el valor de defecto que tomar la columna si no se le asign a uno explcitamente en el momento en que se crea la lnea. La sintaxis que hay que usar es la siguiente: DEFAULT { valor | NULL } donde valor es un valor vlido para el tipo con el que la columna se ha definido. vnculos_de_columna: son vnculos de integridad que se aplican a cada atributo concr eto. Son: NOT NULL, que indica que la columna no puede tomar el valor NULL. PRIMARY KEY, que indica que la columna es la llave primaria de la tabla. una definicin de referencia con la que se indica que la columna es una llave externa hacia la tabla y los campos indicados en la definicin. La sintaxis es la siguiente: REFERENCES nombre_tabla [ ( columna1 [ , columna2 ... ] ) ] [ ON DELETE { CASCADE | SET DEFAULT | SET NULL } ] [ ON UPDATE { CASCADE | SET DEFAULT | SET NULL } ] Las clusulas ON DELETE y ON UPDATE indican qu accin hay que ejecutar en el caso en que una tupla en la tabla referenciada sea eliminada o actualizada. De hecho , en dichos casos en la columna referenciante (que es la que se est definiendo) p odra haber valores inconsistentes. Las acciones pueden ser: CASCADE: eliminar la tupla que contiene la columna referenciante (en el caso de ON DELETE) o tambin actualizar la columna referenciante (en el caso de ON

UPDATE). SET DEFAULT: asignar a la columna referenziante su valor de defecto. SET NULL: asignar a la columna referenciante el valor NULL. un control de valor, con el que se permite o no asignar un valor a la column a en funcin del resultado de una expresin. La sintaxis que se usa es: CHECK (expresin_condicional) donde expresin_condicional es una expresin que ofrece verdadero o falso. Por ejemplo, si estamos definiendo la columna COLUMNA1, con el siguiente con trol: CHECK ( COLUMNA1 < 1000 ) en dicha columna se podrn incluir slo valores inferiores a 1000. vnculo_de_tabla: son vnculos de integridad que se pueden referir a ms columnas de l a tabla. Son: la definicin de la llave primaria: PRIMARY KEY ( columna1 [ , columna2 ... ] ) Vase que en este caso, a diferenc ia de la definicin de la llave primaria como vnculo de columna, sta se puede formar con mas de un atributo. las definiciones de las llaves externas: FOREIGN KEY ( columna1 [ , columna2 ... ] ) definiciones_de_referencia La definicin_de_referencia tiene la misma sintaxis y significado que la que p uede aparecer como vnculo de columna. un control de valor, con la misma sintaxis y significado que el que se puede usar como vnculo de columna. Para aclarar mejor el uso de la instruccin CREATE TABLE, veamos algunas rdenes que implementan la base de datos bibliogrfica ejemplificada. CREATE TABLE Publication ( ID INTEGER PRIMARY KEY, type CHAR(18) NOT NULL ); La instruccin anterior crea la tabla Publication, formada por las dos columna ID de tipo INTEGER, y type de tipo CHAR(18). ID es la llave primaria de la relacin. En el atributo type hay un vnculo de no nulidad. CREATE TABLE Book ( ID INTEGER PRIMARY KEY REFERENCES Publication(ID), title VARCHAR(160) NOT NULL, publisher INTEGER NOT NULL REFERENCES Publisher(ID), volume VARCHAR(16), series VARCHAR(160), edition VARCHAR(16), pub_month CHAR(3), pub_year INTEGER NOT NULL, note VARCHAR(255) );

Crea la relacin Book, formada por nueve atributos. La llave primaria es el atribu to ID, que es tambin una llave externa hacia la relacin Publication. Sobre los atr ibutos title, publisher y pub_year hay vnculos de no nulidad. Adems, el atributo p ublisher es una llave externa hacia la tabla Publisher. CREATE TABLE Author ( publicationID INTEGER REFERENCES Publication(ID), personID INTEGER REFERENCES Person(ID), PRIMARY KEY (publicationID, personID) ); Crea la relacin Author, compuesta por dos atributos: publicationID y personID. La llave primaria en este caso est formada por la combinacin de los dos atributos, c omo est indicado por el vnculo de tabla PRIMARY KEY. PublicationID es una llave ex terna hacia la relacin Publication, mientras que personID lo es hacia la relacin P erson. El archivo create_biblio.sql contiene todas las rdenes necesarias para crear la e structura de la base de datos bibliogrfica ejemplificada. NOTA SOBRE POSTGRESQL En PotgreSQL, por lo menos hasta la versin 6.5.1, no se han implementado todava lo s vnculos sobre las llaves externas. El parser acepta, de todos modos, las sintax is SQL que le afectan, y por tanto los constructos FOREIGN KEY y REFERENCES no p roducen un error, sino slo un warning.