unidad 2 base de datos

12
UNIDAD 2: LENGUAJE DE DEFINICIÓN DE DATOS(DDL) 2.1. CREACIÓN DEL ESQUEMA DE LA BASE DE DATOS El esquema de una base de datos (en inglés, Database Schema) describe la estructura de una Base de datos, en un lenguaje formal soportado por un Sistema administrador de Base de datos (DBMS). En una Base de datos Relacional, el Esquema define sus tablas, sus campos en cada tabla y las relaciones entre cada campo y cada tabla. El esquema es generalmente almacenado en un Diccionario de Datos. Aunque generalmente el esquema es definido en un lenguaje de Base de datos, el término se usa a menudo para referirse a una representación gráfica de la estructura de base de datos (Diseño de lógico de la base de datos). Generalmente en la práctica el término esquema de la base de datos se refiere al diseño físico de la base de datos. Oracle generalmente asocia un 'username' como esquemas en este caso SYSTEM y HR (Recursos humanos). Por otro lado MySQL presenta dos esquemas information_schema y MySQL ambos guardan información sobre privilegios y procedimientos del gestor y no deben ser elimandos. Sintaxis básica para crear una base de datos en Oracle ( No aplica en Oracle express) CREATE DATABASE nombre_baseDatos Sintaxis básica para crear una base de datos en MySQL CREATE DATABASE IF NOT EXISTS nombre_baseDatos; Para conocer las bases datos creadas use 2.2. ACTUALIZACIÓN, MODIFICACIÓN Y ELIMINACIÓN DEL ESQUEMA DE BASE DE DATOS. Una tabla es un sistema de elementos de datos (atributo - valores) que se organizan que usando un modelo vertical - columnas (que son identificados por su nombre)- y horizontal filas. Una tabla tiene un número específico de columnas, pero puede tener cualquier número de filas. Cada fila es identificada por los valores que aparecen en un subconjunto particular de la columna que se ha identificado por una llave primaria.

Upload: erika-vazquez

Post on 18-Dec-2015

8 views

Category:

Documents


1 download

DESCRIPTION

taller de base de datos

TRANSCRIPT

  • UNIDAD 2: LENGUAJE DE DEFINICIN DE DATOS(DDL)

    2.1. CREACIN DEL ESQUEMA DE LA BASE DE DATOS

    El esquema de una base de datos (en ingls, Database Schema) describe la estructura de una

    Base de datos, en un lenguaje formal soportado por un Sistema administrador de Base de

    datos (DBMS). En una Base de datos Relacional, el Esquema define sus tablas, sus campos

    en cada tabla y las relaciones entre cada campo y cada tabla.

    El esquema es generalmente almacenado en un Diccionario de Datos. Aunque generalmente

    el esquema es definido en un lenguaje de Base de datos, el trmino se usa a menudo para

    referirse a una representacin grfica de la estructura de base de datos (Diseo de lgico de

    la base de datos).

    Generalmente en la prctica el trmino esquema de la base de datos se refiere al diseo fsico

    de la base de datos.

    Oracle generalmente asocia un 'username' como esquemas en este caso SYSTEM y HR

    (Recursos humanos).

    Por otro lado MySQL presenta dos esquemas information_schema y MySQL ambos guardan

    informacin sobre privilegios y procedimientos del gestor y no deben ser elimandos.

    Sintaxis bsica para crear una base de datos en Oracle ( No aplica en Oracle express)

    CREATE DATABASE nombre_baseDatos

    Sintaxis bsica para crear una base de datos en MySQL

    CREATE DATABASE IF NOT EXISTS nombre_baseDatos;

    Para conocer las bases datos creadas use

    2.2. ACTUALIZACIN, MODIFICACIN Y ELIMINACIN DEL ESQUEMA DE

    BASE DE DATOS.

    Una tabla es un sistema de elementos de datos (atributo - valores) que se organizan que

    usando un modelo vertical - columnas (que son identificados por su nombre)- y horizontal

    filas. Una tabla tiene un nmero especfico de columnas, pero puede tener cualquier nmero

    de filas. Cada fila es identificada por los valores que aparecen en un subconjunto particular

    de la columna que se ha identificado por una llave primaria.

  • Una tabla de una base de datos es similar en apariencia a una hoja de clculo, en cuanto a

    que los datos se almacenan en filas y columnas. Como consecuencia, normalmente es

    bastante fcil importar una hoja de clculo en una tabla de una base de datos. La principal

    diferencia entre almacenar los datos en una hoja de clculo y hacerlo en una base de datos es

    la forma de organizarse los datos.

    Oracle

    Por lo tanto, la creacin de las tablas en el proceso de programacin en Oracle juegan un

    papel muy importante. En el momento de crear las tablas se definen caractersticas a dos

    niveles: Tabla y Columna, como se muestra a continuacin:

    A nivel de tabla: Refieren a una o a varias columnas, donde cada columna se define

    individualmente.

    Nombre:

    Nombre de la tabla puede ser de 1 a 30 caracteres. La tabla tiene como

    propietario al usuario que las crea. Por ejemplo EQUIPO.

    Hay que tener en cuenta tambin ciertas restricciones con los nombres de

    las tablas: longitud mxima de 30 caracteres, no puede haber nombres de

    tabla duplicados, deben comenzar con un carcter alfabtico, permitir

    caracteres alfanumricos y el guin bajo '_', y Oracle no distingue entre

    maysculas y minsculas.

    Propietario:

    La tabla tiene como propietario al usuario que las crea En nuestro caso

    somos el usuario ALUMNO. Otro usuario que desee usar nuestras tablas

    debe tener autorizacin para ello y hacer referencia a la tabla como

    ALUMNO.EQUIPO (propietario.tabla)

    Cantidad de

    Columnas: Una tabla puede tener un mximo de 254 columnas.

  • A nivel de Columna el nombre de la columna puede tener un mximo de 30 caracteres.

    En Oracle podemos implementar diversos tipos de tablas. A continuacin se presenta una

    recompilacin no exhaustiva de ellas.

    Tipo Tabla Descripcin

    Regular

    (heap)

    Son el mecanismo de almacenamiento de los datos en una base de datos

    Oracle. Contienen un conjunto fijo de columnas. Las columnas de una tabla

    describen los atributos de la entidad que se representa con la tabla. Cada

    columna tiene un nombre y caractersticas especficas: tipo de dato y longitud,

    restricciones, etc.

    Clustered

    Un cluester proporciona un mtodo opcional de almacenar datos de tabla. Un

    cluster est compuesto de un grupo de tablas que comparten los mismos

    bloques de datos. Las tablas son agrupadas mediante columnas comunes.

    Index

    Aqu una tabla es almacenada en la estructura de un ndice. Esto impone orden

    fsico a las filas por si mismas. A diferencia de un heap, donde los datos son

    almacenados en donde caben, en una tabla IOT (Tabla Organizada por

    Indices) los datos son almacenados en el orden de la clave primaria.

    Particionadas

    Es un esquema de organizacin de los datos con el cual podemos dividirla en

    mltiples objetos de almacenamientos llamados particiones de datos o rangos,

    dependiendo los valores puede ser dividido en uno o ms columnas de la tabla.

    Cada particiones de datos es almacenado separadamente. Estos objetos

    almacenados pueden estar en diferentes tablespaces, en el mismo o en una

    combinacin de ambos.

    Temporales

    Son tablas cuyos datos permanecern en el sistema slo durante el tiempo que

    dure la transaccin o sesin involucrada. No obstante, al igual que para las

    tablas permanentes, la definicin de las tablas temporales se almacena en las

    tablas del sistema.

    La sintaxis del comando que permite crear un tabla es la siguiente:

    Del examen de la sintaxis de la sentencia Create Table se pueden concluir que necesitamos

    conocer los distintos tipos de columna y las distintas restricciones que se pueden imponer al

    contenido de las columnas.

  • Existen varios tipos de datos en SQL. De esta manera, cada columna puede albergar una

    informacin de naturaleza distinta. Los tipos de datos ms comunes y sus caractersticas en

    Oracle Express (10 Y 11g) se resumen en la siguiente tabla. Las versiones de Oracle

    comercial soportan una gama mucho ms amplia de tipos de datos.

    Tipo de Dato Descripcin

    BLOB

    Contiene datos binarios con un tamao mximo de 4 gigabytes. Los

    datos binarios nos van a permitir guardar en la base de datos archivos,

    imagenes, sonidos, etc ...

    Casi siempre es preferible guardar la ruta del archivo en la base de

    datos en lugar del propio archivo en modo binario, pero existen ciertas

    circunstancias en las que no nos queda otra solucin.

    BINARY_DOUBLE Presicin doble

    BINARY_FLOAT Presicin simple

    CLOB

    Un tipo de datos CLOB de Oracle contiene datos de caracteres

    basados en el juego de caracteres predeterminados del servidor. Su

    tamao mximo es de 4 gigabytes. Se asigna a cadena.

    Use la siguiente expresin para una consulta de un campo CLOB

    SELECT DBMS_LOB.substr(campo,

    DBMS_LOB.getlength(campo),1)

    FROM tablaprueba;

    CHAR Almacena datos de tipo carcter alfanumrico de longitud fija, con un

    tamao mximo de 2000. caracteres

    DATE Almacena fechas desde el 1-Ene-4712 AC hasta el 31-Dic-4712 DC.

    NUMBER(dig [,

    dec])

    Datos numricos de n dgitos, de los cuales dec son decimales. El

    tamao mximo es de 38 dgitos.

    NVARCHAR2 Almacena un valor alfanumrico de longitud variable en caracteres

    Unicode con las mismas restricciones de varchar.

    TIMESTAMP Fecha y hora (incluidos los segundos), con un tamao que abarca

    desde 7 a 11 bytes.

    Tablas Temporales. Oracle permite la creacin de tablas temporales para mantener datos

    propios y exclusivos a una sesin Oracle determinada. Estos datos permanecern en el

    sistema slo durante el tiempo que dure la transaccin o sesin involucrada. No obstante, al

    igual que para las tablas permanentes, la definicin de las tablas temporales se almacena en

    las tablas del sistema.

    La siguiente sintaxis permite crear una tabla temporal personal para cada sesion. Eso significa

    que los datos no se comparten entre sesiones y se eliminan al final de la misma.

  • ?

    1

    2

    3

    4

    5

    6

    CREATE GLOBAL TEMPORARY TABLE [ schema.] table ( nombreColumna tipoDato [DEFAULT expresin] NOT NULL], [,nombre_columna tipo_dato [DEFAULT expresin] [restriccin_columna] ... |restriccin_tabla]; ON COMMIT { DELETE | PRESERVE } ROWS ] [ physical_properties ]

    Con la opcion ON COMMIT DELETE ROWS se borran los datos cada vez que se hace

    COMMIT en la sesion.

    Con la opcion ON PRESERVE DELETE ROWS los datos no se borran hasta el final de la

    sesion.

    Sus ventajas son varias, la informacin contenida en ella esta solo disponible para la sesin

    actual, cualquier insercin, borrado, actualizacin solo se refleja en la sesin activa.

    Muchas funcionalidades de cualquier tabla normal se mantienen en ella, como triggers a nivel

    tabla, vistas, indices, exportar e importar (claro solo la definicin de la tabla).

    No es posible declarar llaves foraneas en una tabla temporal.

    (DROP) Eliminacin

    Cuando una tabla ya no es til y no vamos a volver a necesitarla debe ser borrada. Esta

    operacin se puede realizar con el comando DROP TABLE.

    DROP TABLE nombre_tabla> [CASCADE CONSTRAINTS][PURGE]

    Se borra la tabla de la base de datos, borrando toda la informacin contenida en la tabla, es

    decir, todas las filas. Tambin se borrar toda la informacin que sobre la tabla existiera en

    el diccionario.

  • Si alguna columna de la tabla a borrar sirve como clave ajena de alguna tabla detalle, impide

    la eliminacin de la tabla, ya que existe una restriccin que requiere de la existencia de la

    tabla maestra. Esto se puede areglar colocando la sentencia.

    CASCADE CONSTRAINTS.

    Esto produce que las restricciones de la tabla detalle se borren antes de borrar la tabla maestra.

    PURGE evita que los objetos borrados se vayan a la papelera

    La siguiente sentencia produce la eliminacin de la tabla BORRAME.

    Modificacin

    Oracle permite modificar las restricciones definidas para una tabla. Esto puede llevar a

    inconsistencia de los datos ya introducidos en la base de datos. Por ello, Oracle tiene definidos mecanismos para modificacin de los datos ya existentes.

    Esta operacin se puede realizar con el comando ALTER TABLE.

    ?

    1

    2

    3

    4

    5

    ALTER TABLE [esquema.]tabla clausula_constraint [,] [ENABLE clausula_activa | DISABLE clausula_disable] [{ENABLE| DISABLE TABLE LOCK] [{ENABLE|DISABLE} ALL TRIGGERS];

    Hay que tener en cuenta varios puntos:

    No es posible disminuir el tamao de una columna, si esta contiene datos.

    En las modificaciones, los tipos anterior y nuevo deben ser compatibles, o la tabla debe

    estar vaca.

    La opcin ADD ... NOT NULL slo ser posible si la tabla est vaca.

    La opcin MODIFY ... NOT NULL slo podr realizarse cuando la tabla no contenga

    ninguna fila con valor nulo en la columna en cuestin.

    Considere el ejemplo Propietario - Automvil, bajo el criterio de hacienda del Gobierno del

    Estado de Veracruz, Mxico. Modificaremos el ejemplo para aadir el atributo color.

  • ?

    1

    2 ALTER TABLE automovil ADD (color CHAR(15) NOT NULL);

    Es factible modificar una tabla aadiendo o eliminando restricciones, en este caso para el

    ejemplo anterior el comando a utilizar ser

    ALTER TABLE

    1

    2

    3

    4

    5

    6

    tabla {ADD | DROP} CONSTRAINT restriccin; ALTER TABLE automovil DROP CONSTRAINT FK_Propietario; ALTER TABLE automovil ADD CONSTRAINT FK_Propietario FOREIGN KEY (idPropietario)

    REFERENCES propietario (idPropietario) ON DELETE CASCADE;

    El cual permitira el borrado en cascada.

    MySQL

    MySQL soporta varios motores de almacenamiento que tratan con distintos tipos de tabla.

    Los motores de almacenamiento de MySQL incluyen algunos que tratan con tablas

    transaccionales y otros que no lo hacen:

    MyISAM trata tablas no transaccionales. Proporciona almacenamiento y

    recuperacin de datos rpida, as como posibilidad de bsquedas fulltext. MyISAM

    se soporta en todas las configuraciones MySQL, y es el motor de almacenamiento por

    defecto a no ser que tenga una configuracin distinta a la que viene por defecto con

    MySQL.

    El motor de almacenamiento MEMORY proporciona tablas en memoria.El motor de

    almacenamiento MERGE permite una coleccin de tablas MyISAM idnticas ser tratadas

  • como una simple tabla. Como MyISAM, los motores de almacenamiento MEMORY y

    MERGE tratan tablas no transaccionales y ambos se incluyen en MySQL por defecto.

    Nota: El motor de almacenamiento MEMORY anteriormente se conoca como HEAP.

    Los motores de almacenamiento InnoDB y BDB proporcionan tablas

    transaccionales. BDB se incluye en la distribucin binaria MySQL-Max en aquellos

    sistemas operativos que la soportan. InnoDB tambin se incluye por defecto en todas

    las distribuciones binarias de MySQL 5.0 . En distribuciones fuente, puede activar o

    desactivar estos motores de almacenamiento configurando MySQL a su gusto.

    El motor de almacenamiento EXAMPLE es un motor de almacenamiento 'tonto' que

    no hace nada. Puede crear tablas con este motor, pero no puede almacenar datos ni

    recuperarlos. El objetivo es que sirva como ejemplo en el cdigo MySQL para ilustrar

    cmo escribir un motor de almacenamiento. Como tal, su inters primario es para

    desarrolladores.

    NDB Cluster es el motor de almacenamiento usado por MySQL Cluster para

    implementar tablas que se particionan en varias mquinas. Est disponible en

    distribuciones binarias MySQL-Max 5.0. Este motor de almacenamiento est

    disponible para linux, Solaris, y Mac OS X. Los autores mencionan que se anadir

    soporte para este motor de almacenamiento en otras plataformas, incluyendo

    Windows en prximas versiones.

    El motor de almacenamiento ARCHIVE se usa para guardar grandes cantidades de

    datos sin ndices con una huella muy pequea.

    El motor de almacenamiento CSV guarda datos en archivos de texto usando formato

    de valores separados por comas.

    El motor de almacenamiento FEDERATED se aadi en MySQL 5.0.3. Este motor

    guarda datos en una base de datos remota. En esta versin slo funciona con MySQL

    a travs de la API MySQL C Client. En futuras versiones, ser capaz de conectar con

    otras fuentes de datos usando otros drivers o mtodos de conexin clientes.

    Si nuestro gestor soporta por defecto las tablas innodb las sentencias para crear las tablas

    previamente mostradas sern exactamente igual a las de oracle. En caso contrario se muestra

    la sintaxis correspondiente

    ?

    1

    2

    3

    4

    5

    CREATE TABLE f1 (

    year INTEGER PRIMARY KEY, campeon CHAR(30), escuderia CHAR(20) ) ENGINE = InnoDB;

    Copiar la estructura de una tabla

  • Para copiar la estructura de la tabla use la siguiente sentencia

    CREATE TABLE colonias LIKE asentamientos;

    Copiar estructura y datos

    Si deseas duplicar una tabla o parte de elloa lo haramos mediante CREATE TABLE

    SELECT. Un ejemplo sera

    CREATE TABLE colonias SELECT * FROM asentamientos;

    Comando Describe

    MySQL proporciona este comando que resulta til para conocer la estructura de una tabla,

    las columnas que la forman y su tipo y restricciones. La sintsis es la siguiente DESCRIBE

    nombreTabla.

    Comando SHOW TABLES y SHOW CREATE TABLE

    El comando SHOW TABLES muestra las tablas dentro de una base de datos y SHOW

    CREATE TABLES muestra la estructura de creacin de la tabla.

    Tablas temporales

    Las tablas temporales solo existen mientras la sesin est viva . Si se corre este

    cdigo en un script de PHP ( Cualquier otro lenguaje), la tabla temporal se destruir

    automticamente al termino de la ejecucin de la pgina. Si no especfica MEMORY, la tabla

    se guardar por defecto en el disco.

    ?

    1

    2

    3

    4

    CREATE TEMPORARY TABLE> temporal ( ife INTEGER(13) PRIMARY KEY, nombre CHAR(30) NOT NULL UNIQUE );

    Este tipo de tabla solo puede ser usada por el usuario que la crea.

    Si creamos una tabla que tiene el mismo nombre que una existente en la base de datos,

    la que existe quedar oculta y trabajaremos sobre la temporal.

    Tablas Memory ( Head )

    Se almacenan en memoria

    Una tabla head no puede tener ms de 1600 campos

  • Las tablas MEMORY usan una longitud de registro fija.

    MEMORY no soporta columnas BLOB o TEXT.

    MEMORY en MySQL 5.0 incluye soporte para columnas AUTO_INCREMENT e

    ndices en columnas que contengan valores NULL.

    Las tablas MEMORY se comparten entre todos los clientes (como cualquier otra tabla

    no-TEMPORARY).

    ?

    1

    2

    3

    4

    CREATE TEMPORARY TABLE temporal ( ife INTEGER(13) PRIMARY KEY, nombre CHAR(30) NOT NULL UNIQUE ) ENGINE = MEMORY;

    Modificacin

    Esta operacin se puede realizar con el comando ALTER TABLE. Para usar ALTER

    TABLE, necesita permisos ALTER, INSERT y CREATE para la tabla. La sintaxis para

    MySQL es

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ...; alter_specification: ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...) | ADD INDEX [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] UNIQUE [index_name] [index_type] (index_col_name,...) | ADD [FULLTEXT| SPATIAL] [index_name] (index_col_name,...) | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name column_definition [FIRST | AFTER col_name] | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP INDEX index_name | DROP FOREIGN KEY fk_symbol | DISABLE KEYS | ENABLE KEYS | RENAME [TO] new_tbl_name | ORDER BY col_name | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] | DISCARD TABLESPACE | IMPORT TABLESPACE | table_options

  • 28

    29

    30

    31

    32

    Considere el ejemplo Propietario - Automvil, bajo el criterio de hacienda del Gobierno del

    Estado de Veracruz, Mxico. Modificaremos el ejemplo para aadir el atributo color segn

    la sintaxis MySQL

    ?

    1

    2 ALTER TABLE automovil ADD (color CHAR(15) NOT NULL);

    Ejemplo: Eliminar una llave foranea

    1

    2

    ALTER TABLE automovil DROP FOREIGN KEY FK_Propietario;

    Agregar una llave foranea con borrado en cascada

    1

    2

    3

    4

    5

    ALTER TABLE automovil ADD CONSTRAINT FK_Propietario FOREIGN KEY (idPropietario)

    REFERENCES propietario (idPropietario) ON DELETE CASCADE;

    Puede ejecutar mltiples clusulas ADD, ALTER, DROP, y CHANGE en un nico

    comando ALTER TABLE. Esta es una extensin MySQL al estndar SQL, que permite slo

    una de cada clusula por comando ALTER TABLE.

  • Ejemplo: Considere la siguiente estructura

    1

    2

    3

    4

    5

    6

    7

    8

    9

    CREATE TABLE IF NOT EXISTS base ( idCodigo INT(11) PRIMARY KEY, colonia CHAR(85) COLLATE utf8_spanish_ci NOT NULL, Asentamiento CHAR(50) COLLATE utf8_spanish_ci NOT NULL, municipio CHAR(85) COLLATE utf8_spanish_ci NOT NULL, idEstado INT(11) NOT NULL, idZona INT(11) NOT NULL, zona CHAR(30) COLLATE utf8_spanish_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

    Agregaremos dos columnas de tipo entero, idAsentamiento Y idMunicipio. La utilidad de

    estos campos se presentan en la unidad 3

    Si intentamos agregar un campo con un nombre existente, aparece un mensaje de error

    indicando que el campo ya existe y la sentencia no se ejecuta.

    Cuando se agrega un campo, si no especificamos, lo coloca al final, despus de todos los

    campos existentes; podemos indicar su posicin (luego de qu campo debe aparecer) con

    AFTER o FIRST:

    1

    2

    3

    ALTER TABLE base ADD idAsentamiento INT AFTER colonia, ADD idMunicipio INT AFTER Asentamiento;