Anda di halaman 1dari 21

Modelado fsico de Bases de Datos.

(SQL & MySQL)

Profra. L.C. Laura Monarca Gaspariano

SQL y SGBDRs
SQL (Structured Query Languaje) lenguaje de consulta estructurado. Es el lenguaje estndar de los DBMS relacionales.
Creado por IBM en los aos 70s En 1986 ANSI e ISO lo estandarizan en SQL-86 Otras versiones: SQL-92, SQL-99

Sistema Gestor de Bases de Datos (SGBD o DBMS) es una herramienta que permite crear y manipular una BD as como sus datos.

Por qu MySQL?
MySQL es el SGBDR gratuito ms popular del mundo. Es un software libre en un esquema de licenciamiento dual. Caractersticas principales de las versiones de MySQL
VERSIN MySQL 4.0 CARACTERSTICAS Bsquedas en texto binario Uniones

4.1
5.0

Subconsultas
Procedimientos almacenados (Store Procedures) Vistas (Views) Cursores (Cursors)

5.0 y 5.1

Disparadores (Triggers)
3

Tipos de datos
En MySQL existen tres tipos de datos bsico:
nmeros textos y fechas & horas

La eleccin de los tipos de datos idneos para atributos es crucial para:


La restriccin de dominios El rendimiento de espacio en disco y el tiempo en las consultas

Tipos numricos
TIPO TINYINT[long] SMALLINT[long] MEDIUMINT[long] INT[long] BIGINT[long] FLOAT[long, deci] RANGO De -128 a 127 o UNSIGNED de 0 a 255 De -32768 a 32767 o UNSIGNED de 0 a 65535 De -8,388,608 a 8,388607 o UNSIGNED de 0 a 16,777,215 De -2,147,483,648 a 2,147,483,647 o UNSIGNED de 0 a 4,294,967,295 De -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 o UNSIGNED de 0 a 18,446,744,073,709,551,615 Nmero pequeo con punto flotante. (versin 5.0.18 no ms de decenas de milln)

DOUBLE[long, deci]
DECIMAL[long, deci]

Nmero largo con punto flotante.


Un DOUBLE con punto decimal fijo.

[long]: indica la longitud mnima de los nmeros, alcanzando tal tamao con ceros a la izquierda. Slo aplica
con la propiedad ZEROFILL. p. ej.: SMALLINT(3) ZEROFILL; -15 000; 1001; 93009300

[long, deci]: long indica el numero de dgitos; deci indica cuantos dgitos de long se toman como
parte decimal, p. ej.: DOUBLE(6,1) almacenara como valor mximo: 99999.9
5

Tipos de texto
TIPO CHAR(long) RANGO Cadena de texto de tamao long. Los espacios sobrantes sern llenados con espacios en blanco. Si la cadena a guardar se excede se trunca. Cadena de texto de tamao long. Los espacios sobrantes sern reutilizados porqu se agrega un carcter de fin de cadena indicando que los dems espacios pueden ser ocupados para otro fin. Si la cadena a guardar se excede se trunca. Cadena de texto de tamao mximo de 255 caracteres. Cadena de texto de tamao mximo de 65535 caracteres. Cadena de texto de tamao mximo de 16,777,215 caracteres. VARCHAR(long)

TINYTEXT TEXT MEDIUMTEXT

LONGTEXT
BINARY(long) VARBINARY(long)

Cadena de texto de tamao mximo de 4,294,967,295 caracteres.


Similar a CHAR pero almacena binarios, long es dado en bytes. Similar a VARCHAR pero almacena binarios, long es dado en bytes.
6

Tipos de texto
TIPO RANGO

TINYBLOB
BLOB

Almacena datos binarios, hasta 255 bytes.


Almacena datos binarios, hasta 65535 bytes.

MEDIUMBLOB
LONGBLOB ENUM

Almacena datos binarios, hasta 16,777,215 bytes.


Almacena datos binarios, hasta 4,294,967,295 bytes. Campo que puede tener un nico valor de una lista que se especifica. El tipo ENUM acepta hasta 65535 valores distintos. P. ej.: el sexo ENUM(hombre,mujer,...) Campo que puede contener ninguno, uno varios valores de una lista. La lista puede tener un mximo de 64 valores distintos. P. ej.: deportes que practicas SET(fut, basquet, box, atletismo,)

SET

Tipos de fechas y horas


TIPO RANGO

DATE
DATETIME TIMESTAMP

El formato es YYYY-MM-DD y ocupa 3 bytes.


El formato es YYYY-MM-DD HH:MM:SS y ocupa 8 bytes. El formato es YYYYMMDDHHMMSS y ocupa 4 bytes con un rango aceptable hasta el ao 2037.

TIME
YEAR

El formato es HH:MM:SS y ocupa 3 bytes.


Ocupa 1 byte con un rango vlido de 1901 hasta 2155.

NOTA: los [ ] indican parmetros opcionales; los ( ) indican parmetros obligatorios

Tips para escoger los tipos ad hoc


Algunos tipos de datos tienen sinnimos p. ej.: INT con INTEGER y DECIMAL con DEC. CHAR es ms rpido que VARCHAR pero toma ms espacio en disco. Como regla de oro usa siempre VARCHAR a menos que siempre o casi siempre tengas datos de una misma longitud como el cdigo postal, RFC, CURP, etc. Un campo definido como TIMESTAMP es automticamente asignado cuando se inserta o edita una tupla incluso cuando no se asigna un valor a ste.

Las fechas y horas son validadas de manera que sean reales, p. ej.: asignarle como valor a un atributo tipo DATE el 2010-02-30 est errneo y colocar: 0000-00-00

Caractersticas extras a los atributos


UNSIGNED: significa que atributos numricos no podrn almacenar valores negativos. ZEROFILL: aplicable a atributos numricos, lo que significa que cualquier espacio extra se alinea a la izquierda con ceros. Todo ZEROFILL es automticamente UNSIGNED. NOT NULL: indica que tendr que ingresarse un valor obligatoriamente para ese atributo. AUTO_INCREMENT: para atributos numricos, si no se le asigna un valor, automticamente toma el valor: N + 1, con N el nmero mayor de la relacin. Utilizado para PKs, p. ej.: nmeros de facturas, id_clientes, etc. DEFAULT: especifica un valor por defecto, no aplica para TEXT o BLOB.

10

Personaliza tus atributos


Asigna en la medida de lo posible NOT NULL a tus atributos, recuerda evitar los nulos en una BD.

Marca siempre como UNSIGNED a todos tus atributos numricos positivos.


Por ejemplo, el cdigo postal 02101 ser almacenado como 2101 ya que el cero a la izquierda no tiene valor. Para que sea respetado como tal, es necesario asignarle la propiedad ZEROFILL con una longitud 5. Si un atributo ENUM se establece como NOT NULL, el valor por defecto ser el primero de los posibles valores permitidos.

Recuerda que el o los atributos que forman la PK no pueden contener valores nulos.
11

ndices
Los ndices son un sistema en las BDs que ayudan a mejorar el rendimiento en tiempo. MySQL permite entre 16 y 64 ndices por tabla, dependiendo del motor de bsqueda. A su vez, cada ndice puede estar conformado por 1-15 columnas.
No excederse en el uso de ndices, aunque mejorarn el rendimiento en la lectura, empeorar el rendimiento en las actualizaciones, ya que los cambios deben registrarse tambin en los ndices. En MySQL existen tres tipos de ndices:
INDEX: para atributos utilizados en:
el WHERE o el ORDER BY de una consulta; en los JOINs cuando el atributo tenga valores en su mayora diferentes

PRIMARY KEY: para la PK (llave primaria) UNIQUE: para atributos no repetibles, es decir, las claves alternativas, por ejemplo: email, username. MySQL slo aceptar un nico null.
12

Nombres de BDs, tablas y atributos


No debe de haber dos BDs con el mismo nombre. No debe de haber dos tablas con el mismo nombre en la misma BD. No debe de haber dos atributos con el mismo nombre en la misma tabla. Nombres deben ser caracteres alfanumricos, sin espacios y menos de 64 caracteres. Los nombres de BDs y tablas son case-sensitive en sistemas Unix pero insensitive en Windows. Nombres de atributos son siempre insensitive. Para referirse a un nombre se debe citar entre backticks (acentos inversos) `hola`.
13

Motores de almacenamiento (tipos de tablas)


MyISAM: genial para la mayora de las aplicaciones, maneja SELECTs e INSERTs muy rpido. El problema es que no maneja transacciones. InnoDB: soporta el manejo de transacciones y realiza UPDATEs muy bien, pero es ms lento y requiere ms espacio en disco que MyISAM. MEMORY: (HEAP), es el mejor motor de los tres, almacenando los datos de las tablas en memoria no en archivos. Su precio es que, solo trabaja con atributos de longitud fija, no soporta AUTO_INCREMENT y hay perdida de todos los datos en un accidente.

Ver motores de almacenamiento: SHOW DATABASES;

14

Tips para los motores de almacenamiento


Como regla de oro, si necesitas transacciones trabaja con InnoDB, si no, trabaja con MyISAM. Una sola BD puede tener diferentes tablas. Como ejemplo, una BD para un e-comercio puede usar MyISAM para almacenar clientes y productos, pero usar InnoDB para pedidos del cliente (para las transacciones). Otros dos motores de almacenamiento populares son MERGE y BDB (Berkeley Database). El primero puede tratar varias tablas MyISAM como una sola tabla. Esta ltima es una alternativa a InnoDB, que prev tambin la transaccin.
15

Conjunto de caracteres y colocaciones


El conjunto de caracteres son todas las letras, nmeros y smbolos que pueden ser almacenados en una columna tipo texto. El conjunto de caracteres por default es latin1, el cual, cubre el ingls y lenguajes occidentales. Tambin hay conjuntos de caracteres para el griego, chino, ruso, coreano, etc. Por su parte, la colocacin determina como son comparados los caracteres. Por ejemplo, case-insensitive trata maysculas y minsculas de manera indistinta, tambin determinan la ordenacin de caracteres acentuados etc. Para nuestro quehacer latin1 puede ser un buen conjunto de caracteres en la mayora de los casos (textos estn codificados en ISO88591).
Ver conjuntos de caracteres disponibles: SHOW CHARACTER SET; Ver colocaciones de un conjunto (latin1): SHOW COLLATION LIKE 'latin1%'
16

Creacin de una Base de Datos


Crear una BD:
CREATE DATABASE nombre_bd CREATE DATABASE nombre_bd CHARACTER SET nombre_conj COLLATE
nombre_col

Mostrar las BDs existentes:


SHOW DATABASES;

Cambiarse de BD:
USE nombre_bd;

17

Creacin de tablas
Crear una tabla:
CREATE TABLE nombre_tabla ( nombre_col1 descripcin, nombre_col2 descripcin, tipodendice (nombre_columnas), tipodendice (nombre_columnas) ) ENGINE = nombre_motorCHARACTER SET nombre_conj COLLATE nombre_col;

Si no defines un motor de almacenamiento a la tabla, MySQL asigna el default, InnoDB en Windows y MyISAM en otro caso. Mostrar tablas de una BD: SHOW TABLES; Mostrar los metadatos de una tabla:
SHOW COLUMNS FROM nombre_tabla; DESCRIBE nombre_tabla;
18

Ejemplo 1. Una BD con una tabla: facturas


EMPRESA FACTURAS FACTURAID CLIENTEID FECHA CANTIDAD DESCRIPCIN FECHAPAGO

Tipos de datos y caractersticas extras:


`facturaid` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT `clienteid` SMALLINT UNSIGNED NOT NULL `fecha` TIMESTAMP NOT NULL `invoice_amount` DECIMAL(10,2) UNSIGNED NOT NULL `descripcion` TINYTEXT `fechapago` DATE
19

Ejemplo 1. ndices, motor de almacenamiento,


Se desea preguntar frecuentemente por fecha y clienteid en facturas ndices a crear:
PRIMARY KEY(`facturaid`) INDEX(`fecha`) INDEX(`clienteid`)
Colocaciones para latin1

Motor de almacenamiento ENGINE = motor, aunque tambin TYPE = motor (ver. antes 4.0.18)
MyISAM, aunque bien podra ser InnoDB

Conjunto de caracteres y colocacin


ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_spanish_ci;

20

Ejemplo 1. Creando la BD y la tabla


CREATE DATABASE `empresa`;

USE `empresa`;
CREATE TABLE `facturas`( `facturaid` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, `clienteid` SMALLINT UNSIGNED NOT NULL, `fecha` TIMESTAMP NOT NULL, `invoice_amount` DECIMAL(10,2) UNSIGNED NOT NULL, `descripcion` TINYTEXT, `fechapago` DATE, PRIMARY KEY(`facturaid`), INDEX(`fecha`), INDEX(`clienteid`) ) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_spanish_ci;
21

Anda mungkin juga menyukai