domingo, 2 de diciembre de 2012

Tipos de Columnas.

TIPOS DE COLUMNAS.

Una vez que hemos decidido qué información debemos almacenar, hemos normalizado nuestras tablas y hemos creado claves principales, el siguiente paso consiste en elegir el tipo adecuado para cada atributo.
En MySQL existen bastantes tipos diferentes disponibles, de modo que será mejor que los agrupemos por categorías: de caracteres, enteros, de coma flotante, tiempos, bloques, enumerados y conjuntos.


CHAR

CHAR
Es un sinónimo de CHAR(1), y puede contener un único carácter.

CHAR()

[NATIONAL] CHAR(M) [BINARY | ASCII | UNICODE]
Contiene una cadena de longitud constante. Para mantener la longitud de la cadena, se rellena a la derecha con espacios. Estos espacios se eliminan al recuperar el valor.
Los valores válidos para M son de 0 a 255, y de 1 a 255 para versiones de MySQL previas a 3.23.
Si no se especifica la palabra clave BINARY estos valores se ordenan y comparan sin distinguir mayúsculas y minúsculas.
CHAR es un alias para CHARACTER.

VARCHAR()

[NATIONAL] VARCHAR(M) [BINARY]
Contiene una cadena de longitud variable. Los valores válidos para M son de 0 a 255, y de 1 a 255 en versiones de MySQL anteriores a 4.0.2.
Los espacios al final se eliminan.
Si no se especifica la palabra clave BINARY estos valores se ordenan y comparan sin distinguir mayúsculas y minúsculas.
VARCHAR es un alias para CHARACTER VARYING.

Tipos de datos enteros

TINYINT

TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un valor entero muy pequeño. El rango con signo es entre -128 y 127. El rango sin singo, de 0 a 255.

BIT, BOOL, BOOLEAN

Todos son sinónimos de TINYINT(1).

SMALLINT

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero corto. El rango con signo es de -32768 a 32767. El rango sin singo, de 0 a 65535.

MEDIUMINT

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero de tamaño medio, el rango con signo está entre -8388608 y 8388607. El rango sin signo, entre 0 y 16777215.

INT

INT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero de tamaño normal. El rango con signo está entre -2147483648 y 2147483647. El rango sin singo, entre 0 y 4294967295.

INTEGER

INTEGER[(M)] [UNSIGNED] [ZEROFILL]
Es sinónimo de INT.

BIGINT

BIGINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero grande. El rango con signo es de -9223372036854775808 a 9223372036854775807. El rango sin signo, de 0 a 18446744073709551615.

Tipos de datos en coma flotante

FLOAT

FLOAT(precision) [UNSIGNED] [ZEROFILL]
Contiene un número en coma flotante. precision puede ser menor o igual que 24 para números de precisión sencilla y entre 25 y 53 para números en coma flotante de doble precisión. Estos tipos son idénticos que los tipos FLOAT y DOUBLE descritos a continuación. FLOAT(X) tiene el mismo rango que los tipos FLOAT y DOUBLE correspondientes, pero el tamaño mostrado y el número de decimales quedan indefinidos.

FLOAT()

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
Contiene un número en coma flotante pequeño (de precisión sencilla). Los valores permitidos son entre -3.402823466E+38 y -1.175494351E-38, 0, y entre 1.175494351E-38 y 3.402823466E+38. Si se especifica el modificador UNSIGNED, los valores negativos no se permiten.
El valor M es la anchura a mostrar y D es el número de decimales. Si se usa sin argumentos o si se usa FLOAT(X), donde X sea menor o igual que 24, se sigue definiendo un valor en coma flotante de precisión sencilla.

DOUBLE

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
Contiene un número en coma flotante de tamaño normal (precisión doble). Los valores permitidos están entre -1.7976931348623157E+308 y -2.2250738585072014E-308, 0, y entre 2.2250738585072014E-308 y 1.7976931348623157E+308. Si se especifica el modificador UNSIGNED, no se permiten los valores negativos.
El valor M es la anchura a mostrar y D es el número de decimales. Si se usa sin argumentos o si se usa FLOAT(X), donde X esté entre 25 y 53, se sigue definiendo un valor en coma flotante de doble precisión.

DOUBLE PRECISION, REAL

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]
REAL[(M,D)] [UNSIGNED] [ZEROFILL]
Ambos son sinónimos de DOUBLE.

DECIMAL

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
Contiene un número en coma flotante sin empaquetar. Se comporta igual que una columna CHAR: "sin empaquetar" significa qu se almacena como una cadena, usando un carácter para cada dígito del valor. El punto decimal y el signo '-' para valores negativos, no se cuentan en M (pero el espacio para estos se reserva). Si D es 0, los valores no tendrán punto decimal ni decimales.
El rango de los valores DECIMAL es el mismo que para DOUBLE, pero el rango actual para una columna DECIMAL dada está restringido por la elección de los valores M y D.
Si se especifica el modificador UNSIGNED, los valores negativos no están permitidos.
Si se omite D, el valor por defecto es 0. Si se omite M, el valor por defecto es 10.

DEC, NUMERIC, FIXED

DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
Todos ellos son sinónimos de DECIMAL.

Tipos de datos para tiempos

DATE

DATE
Contiene una fecha. El rango soportado está entre '1000-01-01' y '9999-12-31'. MySQL muestra los valores DATE con el formato 'AAAA-MM-DD', pero es posible asignar valores a columnas de este tipo usando tanto números como cadenas.

DATETIME

DATETIME
Contiene una combinación de fecha y hora. El rango soportado está entre '1000-01-01 00:00:00' y '9999-12-31 23:59:59'. MySQL muestra los valores DATETIME con el formato 'AAAA-MM-DD HH:MM:SS', pero es posible asignar valores a columnas de este tipo usando tanto cadenas como números.

TIMESTAMP

TIMESTAMP[(M)]
Contiene un valor del tipo timestamp. El rango está entre '1970-01-01 00:00:00' y algún momento del año 2037.
Hasta MySQL 4.0 los valores TIMESTAMP se mostraban como AAAAMMDDHHMMSS, AAMMDDHHMMSS, AAAAMMDD o AAMMDD, dependiendo del si el valor de M es 14 (o se omite), 12, 8 o 6, pero está permitido asignar valores a columnas TIMESTAMP usando tanto cadenas como números.
Desde MySQL 4.1, TIMESTAMP se devuelve como una cadena con el formato 'AAAA-MM-DD HH:MM:SS'. Para convertir este valor a un número, bastará con sumar el valor 0. Ya no se soportan distintas longitudes para estas columnas.
Se puede asignar fácilmente la fecha y hora actual a uno de estas columnas asignando el valor NULL.
El argumento M afecta sólo al modo en que se visualiza la columna TIMESTAMP. Los valores siempre se almacenan usando cuatro bytes. Además, los valores de columnas TIMESTAMP(M), cuando M es 8 ó 14 se devuelven como números, mientras que para el resto de valores se devuelven como cadenas.

TIME

TIME
Una hora. El rango está entre '-838:59:59' y '838:59:59'. MySQL muestra los valores TIME en el formato 'HH:MM:SS', pero permite asignar valores a columnas TIME usando tanto cadenas como números.

YEAR

YEAR[(2|4)]
Contiene un año en formato de 2 ó 4 dígitos (por defecto es 4). Los valores válidos son entre 1901 y 2155, y 0000 en el formato de 4 dígitos. Y entre 1970-2069 si se usa el formato de 3 dígitos (70-69).
MySQL muestra los valores YEAR usando el formato AAAA, pero permite asignar valores a una columna YEAR usando tanto cadenas como números.

Tipos de datos para datos sin tipo o grandes bloques de datos

TINYBLOB, TINYTEXT

TINYBLOB
TINYTEXT
Contiene una columna BLOB o TEXT con una longitud máxima de 255 caracteres (28 - 1).

BLOB, TEXT

BLOB
TEXT
Contiene una columna BLOB o TEXT con una longitud máxima de 65535 caracteres (216 - 1).

MEDIUMBLOB, MEDIUMTEXT

MEDIUMBLOB
MEDIUMTEXT
Contiene una columna BLOB o TEXT con una longitud máxima de 16777215 caracteres (224 - 1).

LONGBLOB, LONGTEXT

LONGBLOB
LONGTEXT
Contiene una columna BLOB o TEXT con una longitud máxima de 4294967298 caracteres (232 - 1).

Tipos enumerados y conjuntos

ENUM

ENUM('valor1','valor2',...)
Contiene un enumerado. Un objeto de tipo cadena que puede tener un único valor, entre una lista de valores 'valor1', 'valor2', ..., NULL o el valor especial de error "". Un ENUM puede tener un máximo de 65535 valores diferentes.

SET

SET('valor1','valor2',...)
Contiene un conjunto. Un objeto de tipo cadena que puede tener cero o más valores, cada uno de los cuales debe estar entre una lista de valores 'valor1', 'valor2', ...
Un conjunto puede tener un máximo de 64 miembros.

Ejemplo 1

El siguiente paso del diseño nos obliga a elegir tipos para cada atributo de cada relación. Veamos cómo lo hacemos para los ejemplos que hacemos en cada capítulo.
Para el primer ejemplo teníamos el siguiente esquema:
Estación(Identificador, Latitud, Longitud, Altitud)
Muestra(IdentificadorEstación, Fecha, Temperatura mínima, Temperatura máxima,
  Precipitaciones, Humedad mínima, Humedad máxima, Velocidad del viento mínima,
  Velocidad del viento máxima)
En MySQL es importante, aunque no obligatorio, usar valores enteros como claves principales, ya que las optimizaciones que proporcionan un comportamiento mucho mejor para claves enteras.
Vamos a elegir el tipo de cada atributo, uno por uno:

Relación Estación

Identificador: podríamos pensar en un entero corto o medio, aunque no tenemos datos sobre el número de estaciones que debemos manejar, no es probable que sean más de 16 millones. Este dato habría que incluirlo en la documentación, pero supongamos que con MEDIUMINT UNSIGNED es suficiente.
Latitud: las latitudes se expresan en grados, minutos y segundos, al norte o sur del ecuador. Los valores están entre 'N90º00'00.000"' y 'S90º00'00.000"'. Además, los segundos, dependiendo de la precisión de la posición que almacenemos, pueden tener hasta tres decimales. Para este tipo de datos tenemos dos opciones. La primera es la que comentamos en el capítulo anterior: no considerar este valor como atómico, y guardar tres números y la orientación N/S como atributos separados. Si optamos por la segunda, deberemos usar una cadena, que tendrá como máximo 14 caracteres. El tipo puede ser CHAR(14) o VARCHAR(14).
Longitud: las longitudes se almacenan en un formato parecido, pero la orientación es este/oeste, y el valor de grados varía entre 0 y 180, es decir, que necesitamos un carácter más: CHAR(15) o VARCHAR(15).
Altitud: es un número entero, que puede ser negativo si la estación está situada en una depresión, y como máximo a unos 8000 metros (si alguien se atreve a colocar una estación en el Everest. Esto significa que con un MEDIUMINT tenemos más que suficiente.

Relación Muestra

IdentificadorEstación: se trata de una clave foránea, de modo que debe ser del mismo tipo que la clave primaria de la que procede: MEDIUMINT UNSIGNED.
Fecha: sólo necesitamos almacenar una fecha, de modo que con el tipo DATE será más que suficiente.
Temperatura mínima: las temperaturas ambientes en grados centígrados (Celsius) se pueden almacenar en un entero muy pequeño, TINYINT, que permite un rango entre -128 y 127. Salvo que se sitúen estaciones en volcanes, no es probable que se salga de estos rangos. Recordemos que las muestras tienen aplicaciones meteorológicas.
Temperatura máxima: lo mismo que para la temperatura mínima: TINYINT.
Precipitaciones: personalmente, ignoro cuánto puede llegar a llover en un día, pero supongamos que 255 litros por metro cuadrado sea una cantidad que se puede superar. En ese caso estamos obligados a usar el siguiente rango: SMALLINT UNSIGNED, que nos permite almacenar números hasta 65535.
Humedad mínima: las humedades se miden en porcentajes, el valor está acotado entre 0 y 100, de nuevo nos bastará con un TINYINT, nos da lo mismo con o sin signo, pero usaremos el UNSIGNED.
Humedad máxima: También TINYINT UNSIGNED.
Velocidad del viento mínima: también estamos en valores siempre positivos, aunque es posible que se superen los 255 Km/h, de modo que, para estar seguros, usaremos SMALLINT UNSIGNED.
Velocidad del viento máxima: también usaremos SMALLINT UNSIGNED.

Ejemplo 2

Para el segundo ejemplo partimos del siguiente esquema:
Libro(ClaveLibro, Título, Idioma, Formato, ClaveEditorial)
Tema(ClaveTema, Nombre)
Autor(ClaveAutor, Nombre)
Editorial(ClaveEditorial, Nombre, Dirección, Teléfono)
Ejemplar(ClaveEjemplar, ClaveLibro, NúmeroOrden, Edición, Ubicación, Categoría)
Socio(ClaveSocio, Nombre, Dirección, Teléfono, Categoría)
Préstamo(ClaveSocio, ClaveEjemplar, NúmeroOrden, Fecha_préstamo,
  Fecha_devolución, Notas)
Trata_sobre(ClaveLibro, ClaveTema)
Escrito_por(ClaveLibro, ClaveAutor)

Relación Libro

ClaveLibro: como clave principal que es, este atributo debe ser de tipo entero. Una biblioteca puede tener muchos libros, de modo que podemos usar el tipo INT.
Título: para este atributo usaremos una cadena de caracteres, la longitud es algo difícil de decidir, pero como primera aproximación podemos usar un VARCHAR(60).
Idioma: usaremos una cadena de caracteres, por ejemplo, VARCHAR(15).
Formato: se trata de otra palabra, por ejemplo, VARCHAR(15).
ClaveEditorial: es una clave foránea, y por lo tanto, el tipo debe ser el mismo que para el atributo 'ClaveEditorial' de la tabla 'Editorial', que será SMALLINT.

Relación Tema

ClaveTema: el número de temas puede ser relativamente pequeño, con un SMALLINT será más que suficiente.
Nombre: otra cadena, por ejemplo, VARCHAR(40).

Relación Autor

ClaveAutor: usaremos, al igual que con los libros, el tipo INT.
Nombre: aplicando el mismo criterio que con los título, usaremos el tipo VARCHAR(60).

Relación Editorial

ClaveEditorial: no existen demasiadas editoriales, probablemente un SMALLINT sea suficiente.
Nombre: usaremos el mismo criterio que para títulos y nombres de autores, VARCHAR(60).
Dirección: también VARCHAR(60).
Teléfono: los números de teléfono, a pesar de ser números, no se suelen almacenar como tales. El problema es que a veces se incluyen otros caracteres, como el '+' para el prefijo, o los paréntesis. En ciertos paises se usan caracteres como sinónimos de dígitos, etc. Usaremos una cadena lo bastante larga, VARCHAR(15).

Relación Ejemplar

ClaveEjemplar: es la clave principal, el tipo debe ser INT.
ClaveLibro: es una clave foránea, el tipo debe ser INT.
NúmeroOrden: tal vez el tipo TINYINT sea pequeño en algunos casos, de modo que usaremos SMALLINT.
Edición: pasa lo mismo que con el valor anterior, puede haber libros con más de 255 ediciones, no podemos arriesgarnos. Usaremos SMALLINT.
Ubicación: esto depende de cómo se organice la biblioteca, pero un campo de texto puede almacenar tanto coordenadas como etiquetas, podemos usar un VARCHAR(15).
Categoría: recordemos que para este atributo usábamos una letra, por lo tanto usaremos el tipo CHAR.

Relación Socio

ClaveSocio: usaremos un INT.
Nombre: seguimos con el mismo criterio, VARCHAR(60).
Dirección: lo mismo, VARCHAR(60).
Teléfono: como en el caso de la editorial, VARCHAR(15).
Categoría: ya vimos que este atributo es un carácter, CHAR.

Relación Préstamo

ClaveSocio: como clave foránea, el tipo está predeterminado. INT.
ClaveEjemplar: igual que el anterior, INT.
NúmeroOrden: y lo mismo en este caso, SMALLINT.
Fecha_préstamo: tipo DATE, sólo almacenamos la fecha.
Fecha_devolución: también DATE.
Notas: necesitamos espacio, para este tipo de atributos se usa el tipo BLOB.

Relación Trata_sobre

ClaveLibro: INT.
ClaveTema: SMALLINT.

Relación Escrito_por

ClaveLibro: INT.
ClaveAutor: INT.

Normalizacion

^
Antes de poder aplicar el proceso de normalización, debemos asegurarnos de que estamos trabajando con una base de datos relacional, es decir, que cumple con la definición de base de datos relacional.
El proceso de normalización consiste verificar el cumplimiento de ciertas reglas que aseguran la eliminación de redundancias e inconsistencas. Esto se hace mediante la aplicación de ciertos procedimientos y en ocasiones se traduce en la separación de los datos en diferentes relaciones. Las relaciones resultantes deben cumplir ciertas características:
  • Se debe conservar la información:
    • Conservación de los atributos.
    • Conservación de las tuplas, evitando la aparición de tuplas que no estaban en las relaciones originales.
  • Se deben conservar las dependencias.
Este proceso se lleva a cabo aplicando una serie de reglas llamadas "formas normales".
Estas reglas permiten crear bases de datos libres de redundancias e inconsistencias, que se ajusten a la definición del doctor Codd de base de datos relacional.
MySQL usa bases de datos relacionales, de modo que deberemos aprender a usar con soltura, al menos, las tres primeras formas normales.
La teoría completa de bases de datos relacionales es muy compleja, y puede resultar muy oscura si se expresa en su forma más simbólica. Ver esta teoría en profundidad está fuera de los objetivos de este curso, al menos por el momento.
Sin embargo, necesitaremos comprender bien parte de esa teoría para aplicar las tres primeras formas normales. La comprensión de las formas cuarta y quinta requieren una comprensión más profunda de conceptos complejos, como el de las dependencias multivaluadas o las dependencias de proyección.
Generalmente, en nuestras aplicaciones con bases de datos (que podríamos calificar como domésticas o pequeñas), no será necesario aplicar las formas normales cuarta y quinta, de modo que, aunque las explicaremos lo mejor que podamos, no te preocupes si no consigues aplicarlas por completo.
Por otra parte, si estos conceptos no quedan suficientemente claros la culpa es completamente nuestra, por no ser capaces de explicarlos claramente.
Pero ánimo, seguro que en poco tiempo aprendemos a crear bases de datos fuertes y robustas. Pero antes, y sintiéndolo mucho, debemos seguir con algunas definiciones más.

Regla Descripción
Primera Forma Normal (1FN) Incluye la eliminación de todos los grupos repetidos.
Segunda Forma Normal (2FN) Asegura que todas las columnas que no son llave sean completamente dependientes de la llave primaria (PK).
Tercera Forma Normal (3FN) Elimina cualquier dependencia transitiva. Una dependencia transitiva es aquella en la cual las columnas que no son llave son dependientes de otras columnas que tampoco son llave.

Modelo Relacional

^
Entre los modelos lógicos, el modelo relacional está considerado como el más simple. No vamos a entrar en ese tema, puesto que es el único que vamos a ver, no tiene sentido establecer comparaciones.
Diremos que es el que más nos conviene. Por una parte, el paso del modelo E-R al relacional es muy simple, y por otra, MySQL, como implementación de SQL, está orientado principalmente a bases de datos relacionales.
El doctor Edgar F. Codd, un investigador de IBM, inventó en 1970 el modelo relacional, también desarrolló el sistema de normalización, que veremos en el siguiente capítulo.
El modelo se compone de tres partes:
  1. Estructura de datos: básicamente se compone de relaciones.
  2. Manipulación de datos: un conjunto de operadores para recuperar, derivar o modificar los datos almacenados.
  3. Integridad de datos: una colección de reglas que definen la consistencia de la base de datos.

Modelo Entidad Relacion

 Modelo Entidad Relacion

En esencia, el modelo entidad-relación (en adelante E-R), consiste en buscar las entidades que describan los objetos que intervienen en el problema y las relaciones entre esas entidades.
Todo esto se plasma en un esquema gráfico que tiene por objeto, por una parte, ayudar al programador durante la codificación y por otra, al usuario a comprender el problema y el funcionamiento del programa.

Definiciones

Estamos hablando del modelo Entidad-Relación, por lo tanto este es un concepto que no podemos dejar sin definir.
Entidad: es una representación de un objeto individual concreto del mundo real.
Si hablamos de personas, tu y yo somos entidades, como individuos. Si hablamos de vehículos, se tratará de ejemplares concretos de vehículos, identificables por su matrícula, el número de chasis o el de bastidor.
Conjunto de entidades: es la clase o tipo al que pertenecen entidades con características comunes.
Cada individuo puede pertenecer a diferentes conjuntos: habitantes de un país, empleados de una empresa, miembros de una lista de correo, etc. Con los vehículos pasa algo similar, pueden pertenecer a conjuntos como un parque móvil, vehículos de empresa, etc.
En el modelado de bases de datos trabajaremos con conjuntos de entidades, y no con entidades individuales. La idea es generalizar de modo que el modelo se ajuste a las diferentes situaciones por las que pasará el proceso modelado a lo largo de su vida. Será el usuario final de la base de datos el que trabaje con entidades. Esas entidades constituirán los datos que manejará con la ayuda de la base de datos.
Atributo: cada una de las características que posee una entidad, y que agrupadas permiten distingirla de otras entidades del mismo conjunto.
En el caso de las personas, los atributos pueden ser características como el nombre y los apellidos, la fecha y lugar de nacimiento, residencia, número de identificación... Si se trata de una plantilla de empleados nos interesarán otros atributos, como la categoría profesional, la antigüedad, etc.
En el caso de vehículos, los atributos serán la fecha de fabricación, modelo, tipo de motor, matrícula, color, etc.
Según el conjunto de entidades al que hallamos asignado cada entidad, algunos de sus atributos podrán ser irrelevantes, y por lo tanto, no aparecerán; pero también pueden ser necesarios otros. Es decir, el conjunto de atributos que usaremos para una misma entidad dependerá del conjunto de entidades al que pertenezca, y por lo tanto del proceso modelado.
Por ejemplo, no elegiremos los mismos atributos para personas cuando formen parte de modelos diferentes. En un conjunto de entidades para los socios de una biblioteca, se necesitan ciertos atributos. Estos serán diferentes para las mismas personas, cuando se trate de un conjunto de entidades para los clientes de un banco.
Dominio: conjunto de valores posibles para un atributo.
Una fecha de nacimiento o de matriculación tendrá casi siempre un dominio, aunque generalmente se usará el de las fechas posibles. Por ejemplo, ninguna persona puede haber nacido en una fecha posterior a la actual. Si esa persona es un empleado de una empresa, su fecha de nacimiento estará en un dominio tal que actualmente tenga entre 16 y 65 años. (Por supuesto, hay excepciones...)
Los números de matrícula también tienen un dominio, así como los colores de chapa o los fabricantes de automóviles (sólo existe un número limitado de empresas que los fabrican).
Generalmente, los dominios nos sirven para limitar el tamaño de los atributos. Supongamos que una empresa puede tener un máximo de 1000 empleados. Si uno de los atributos es el número de empleado, podríamos decir que el dominio de ese atributo es (0,1000).
Con nombres o textos, los dominios limitarán su longitud máxima.
Sin embargo, los dominios no son demasiado importantes en el modelo E-R, nos preocuparemos mucho más de ellos en el modelo relacional y en el físico.

sábado, 1 de diciembre de 2012

Definiciones

 
Pero, ¿qué son las bases de datos?
La teoría es muy compleja y bastante árida, si estás interesado en estudiar una buena base teórica deberías consultar la sección de bibliografía y enlaces. El presente curso sólo tiene por objetivo explicar unas bases generales, aunque sólidas, suficientes para desarrollar la mayor parte de los pequeños y medianos proyectos.
Hay que señalar que existen varios modelos lógicos de bases de datos, aunque en este curso sólo veremos el modelo de bases de datos relacionales. (Al menos de momento).
Bien, probablemente tengas una idea intuitiva de lo que es una base de datos, y probablemente te suenen algunos conceptos, como tupla, tabla, relación, clave... Es importante que veamos algunas definiciones, ya que gran parte de la teoría que veremos en este curso se basa en conceptos que tienen significados muy precisos dentro de la teoría de bases de datos.

El por que MySQL

Ya hemos visto que para acceder a bases de datos es mucho más útil usar un motor o servidor que hace las funciones de intérprete entre las aplicaciones y usuarios con las bases de datos.
Esta utilidad se traduce en ventajas, entre las que podemos mencionar las siguientes:
  • Acceso a las bases de datos de forma simultánea por varios usuarios y/o aplicaciones.
  • Seguridad, en forma de permisos y privilegios, determinados usuarios tendrán permiso para consulta o modificación de determinadas tablas. Esto permite compartir datos sin que peligre la integridad de la base de datos o protegiendo determinados contenidos.
  • Potencia: SQL es un lenguaje muy potente para consulta de bases de datos, usar un motor nos ahorra una enorme cantidad de trabajo.
  • Portabilidad: SQL es también un lenguaje estandarizado, de modo que las consultas hechas usando SQL son fácilmente portables a otros sistemas y plataformas. Esto, unido al uso de C/C++ proporciona una portabilidad enorme.
En concreto, usar MySQL tiene ventajas adicionales:
  • Escalabilidad: es posible manipular bases de datos enormes, del orden de seis mil tablas y alrededor de cincuenta millones de registros, y hasta 32 índices por tabla.
  • MySQL está escrito en C y C++ y probado con multitud de compiladores y dispone de APIs para muchas plataformas diferentes.
  • Conectividad: es decir, permite conexiones entre diferentes máquinas con distintos sistemas operativos. Es corriente que servidores Linux o Unix, usando MySQL, sirvan datos para ordenadores con Windows, Linux, Solaris, etc. Para ello se usa TCP/IP, tuberías, o sockets Unix.
  • Es multihilo, con lo que puede beneficiarse de sistemas multiprocesador.
  • Permite manejar multitud de tipos para columnas.
  • Permite manejar registros de longitud fija o variable.

Instalacion del servidor

 INSTALACION DEL SERVIDOR

Veremos ahora cómo instalar las aplicaciones y paquetes necesarios para poder trabajar con MySQL.
Lo primero es obtener el paquete de instalación desde el servidor en Internet: http://www.mysql.com/, y después instalarlo en nuestro ordenador.
Se puede descargar el servidor MySQL y los clientes estándar directamente desde este enlace: http://www.mysql.com/downloads/index.html. Hay que elegir la versión que se quiere descargar, preferiblemente la recomendada, ya que suele ser la más actualizada y estable.
Una vez seleccionada la versión, hay que elegir la distribución adecuada al sistema operativo que usemos: Windows, Linux, Solaris... El fichero descargado se podrá instalar directamente.
Terminar de instalar el servidor depende en gran medida de cada caso, y es mejor remitirse a la documentación facilitada por MySQL junto a cada paquete.
Instalación según el sistema operativo.
Ahora estamos en disposición de poder utilizar MySQL desde la consola de nuestro ordenador, en modo de línea de comandos.