jueves, 22 de noviembre de 2012

BASE DE DATOS MYSQL
INTRODUCCIÓN:
Es un sistema de gestión de bases de datos relacional, multihilo y multiusuario con más de seis millones de instalaciones.1 MySQL AB —desde enero de 2008 una subsidiaria de Sun Microsystems y ésta a su vez de Oracle Corporation desde abril de 2009— desarrolla MySQL como software libre en un esquema de licenciamiento dual.
Por un lado se ofrece bajo la GNU GPL para cualquier uso compatible con esta licencia, pero para aquellas empresas que quieran incorporarlo en productos privativos deben comprar a la empresa una licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C.
Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pública y los derechos de autor del código están en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el copyright de la mayor parte del código.
Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la venta de licencias privativas, la compañía ofrece soporte y servicios. Para sus operaciones contratan trabajadores alrededor del mundo que colaboran vía Internet. MySQL AB fue fundado por David Axmark, Allan Larsson y Michael Widenius.



CREAR Y SELECCIONAR UNA BASE DE DATOS:
Si el administrador crea su base de datos en el mismo momento que le otorga privilegios, puede comenzar a utilizarla, de lo contrario necesitará crearla:
mysql> CREATE DATABASE menagerie;
En ambientes Unix, los nombres de las bases de datos son case sensitive (al contrario que las palabras clave), de modo que siempre debe referirse a su base de datos como menagerie, y no MenagerieMENAGERIE, o una variante similar. Esto también se aplica a los nombres de tablas. Esta restricción no existe en Windows, aunque puede utilizar el mismo esquema de mayúsculas cuando se refiera a bases de datos y tablas en una consulta dada.
Al crear una base de datos, ésta no se selecciona para su uso, debe hacerlo explicitamente. Para convertir amenagerie en la base de datos actual, use este comando:
mysql> USE menagerie
Database changed
Las bases de datos sólo necesitan ser creadas una sola vez, pero deben ser seleccionadas cada vez que se inicia una sesión de mysql. Puede hacerse a través del comando USE como se muestra en el ejemplo, o puede indicar la base de datos en la linea de comandos al ejecutar mysql. Simplemente debe indicar el nombre de la base de datos a continuación de los parámetros que necesite ingresar. Por ejemplo:
shell> mysql -h host -u user -p menagerie
Enter password: ********
Advierta en el comando anterior que menagerie no es la contraseña. Si se quisiera suministrar la contraseña en la linea de comandos, después de la opción -p, debe hacerse sin dejar espacios en blanco (por ejemplo, -pmypassword, no -p mypassword). De todos modos, colocar la contraseña en la linea de comandos no es recomendable porque lo expone a la vista de otros usuarios.
COMO CREAR TABLAS Y RELACIONES:
La creación de la base de datos ha sido una tarea sencilla, pero hasta ahora permanece vacía, como le muestra SHOW TABLES:
mysql> SHOW TABLES;
Empty set (0.00 sec)
La parte difícil es decidir cómo debería ser la estructura de su base de datos: qué tablas necesitará, y qué columnas habrá en cada tabla.
Querrá una tabla para contener un registro por cada mascota. Esta tabla puede llamarse pet, y debería contener, como mínimo, el nombre de cada animal. Dado que el nombre no es muy relevante por sí mismo, tendría que tener más información. Por ejemplo, si más de una persona en su familia tendrá mascotas, querrá listar también el dueño de cada animal. Y algunos otros datos descriptivos básicos, como especie y sexo.
¿Qué hacer con la edad? Podría ser de interés, pero no es un buen dato para almacenar en una base de datos. La edad cambia a medida que pasa el tiempo, lo cual significa que debería actualizar la base de datos a menudo. En lugar de esto, es mejor almacenar un valor fijo, como la fecha de nacimiento. De este modo, cada vez que requiera saber la edad, podrá calcularla como la diferencia entre la fecha de nacimiento y la fecha actual. MySQL provee funciones para realizar cálculos con fechas, por lo que no es dificultoso. Almacenar la fecha de nacimiento en lugar de la edad tiene otras ventajas:
  • Puede usar la base de datos para tareas como generar recordatorios para los próximos cumpleaños de mascotas. (Si piensa que este tipo de consultas no es importante, considere que es lo mismo que haría en un contexto de base de datos de negocios para identificar aquellos clientes a los que habrá que enviar una tarjeta por su cumpleaños, para conseguir ese toque personal con la asistencia del ordenador).
  • Puede calcular edades en relación a otras fechas además de la actual. Por ejemplo, almacenar la fecha de muerte de una mascota le posibilita calcular la edad que tenía a ese momento.
Probablemente pensará en otros tipos de información que resultarían útiles dentro de la tabla pet pero los identificados hasta ahora son suficientes: name (nombre), owner (propietario), species (especie), sex (sexo), birth (nacimiento) y death (muerte).
Debe usar la sentencia CREATE TABLE para especificar la estructura de una tabla:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
El tipo de dato VARCHAR es una buena elección para las columnas nameowner, y species porque los datos que allí se almacenan no son de longitud uniforme. En realidad no es necesario que todas estas columnas tengan la misma longitud ni que ésta sea 20. En MySQL 5.0.3 y versiones posteriores, normalmente se puede adoptar cualquier longitud entre 1 y 65535, según lo que se crea más razonable. (Nota: Anteriormente a MySQL 5.0.3, el límite de longitud era 255.) Si en el futuro debiera aumentar la longitud de estos campos, MySQL tiene la sentencia ALTER TABLE.
Hay varios tipos de datos que podrían usarse para representar el sexo en los registros de animales, tal como 'm''f', o 'male' (masculino) y 'female' (femenino). Lo más simple es usar los caracteres 'm' y 'f'.
Es obvio el uso del tipo de dato DATE para las columnas birth y death.
Luego de crear una tabla, SHOW TABLES debería producir una salida:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
| pet |
+---------------------+
+---------------------+
Para verificar que la tabla ha sido creada en la forma esperada, utilice la sentencia DESCRIBE:
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
| name | varchar(20) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+ | owner | varchar(20) | YES | | NULL | |
| birth | date | YES | | NULL | |
| species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
DESCRIBE puede ser utilizada en cualquier momento, por ejemplo, si olvida los nombres o el tipo de dato de las columnas de la tabla.





CREATE TABLE `clientes` (
`Codcliente` varchar(100) NOT NULL default '',
`Activo` char(2) NOT NULL default '',
PRIMARY KEY (`Codcliente`)
) TYPE=InnoDB;

# Servidor: 138.132.119.180

# Base de Datos: producciondesa
# Tabla: 'productos'
#
CREATE TABLE `productos` (
`CodProducto` int(11) NOT NULL auto_increment,
`Producto` varchar(100) NOT NULL default '',
`PnProducto` varchar(100) default NULL,
`Codcliente` varchar(100) NOT NULL default '',
`OF1` varchar(100) NOT NULL default '',
`OF2` varchar(100) NOT NULL default '',
`UltimoLote` varchar(100) NOT NULL default '',
`UltimoPallet` varchar(100) default NULL,
`Activo` char(2) default 'SI',
`Cantidad` int(10) NOT NULL default '1',
PRIMARY KEY (`CodProducto`),
KEY `fclientes` (`Codcliente`),
CONSTRAINT `0_1165` FOREIGN KEY (`Codcliente`) REFERENCES `clientes` (`Codcliente`)
) TYPE=InnoDB;

Con esta tabla se hace la relación


CONSTRAINT `0_1165` FOREIGN KEY (`Codcliente`) REFERENCES `clientes` (`Codcliente`)

) TYPE=InnoDB;

NORMALIZACION MYSQL:
REGLAS NORMALIZACION :
1.- Observar que cada tabla empieza con una clave generalmente de tipo numerica, esta clave numerica sirve como un elemento que individualiza dos o mas ocurrencias dentro de una tabla.
Por ejemplo si construimos la tabla AUTOS para una distribuidora de automoviles, es obvio que a la larga la tabla contendra dos o mas veces un FORD RAM BLANCO PICKUP, en este caso se ocupa un identificador o clave que permita al DBMS ( sisMYSQL TEMA administrador de bases de datos) distinguir entre dos casos similares, generalmente en automoviles este ID es el numero de serie, para el caso de provedores es el RFC (registro federal de causantes), para el caso de ciudadanos es el registro de su credencial electoral.
Atencion muchas entidades de informacion ya traen en forma intrinsica su propia clave o identificador, como los ejemplos arriba mencionados, pero en muchos casos la tabla o entidad de informacion carece de este identificador, por ejemplo si se esta creando una tabla GANADO para un rancho ganadero o para un veterinario, es patente que el ganado no nace ni tiene un identificador propio, para esta situacion la clave o identificador se debera crear o asignar por el programador o sisMYSQL TEMA de informacion, las sugerencias son:
a) Crear un campo clave dentro de la tabla usando la palabra CLAVE + nombre de la entidad, por ejemplo CLAVEVACA o CLAVEGANADO y a cada res se le va asignando un numero consecutivo.
b) En forma mas moderna podemos usar mejor un codigo de barras o UPC ( que tambien no es otra cosa que una serie consecutiva de numeros) , hay cientos de programas en Internet que se usan para imprimir etiquetas con este codigo de barras y asi es mas facil pegarle una etiqueta a la vaca y usar el campo UPC en la tabla, para leer este codigo de barras solo usar un escaner UCP les recomiendo el CUE CAT que practicamente lo estan regalando en EBAY.COM ( diez dolares).
c) Si ya quieren usar una tecnica mas moderna usar un chip RFID (que tambien seria la clave de la tabla) que no es otra cosa mas que un chip con los numeros consecutivos del upc pero incorpora un trasmisor inalambrico, es decir le pegan el RFID a la vaca y con un radio receptor inalambrico, ya se puede estar escaneando el numero de la vaca, (es mejor esta tecnologia porque no se tienen que acercar a la vaca para escanearla,) el chip RFID en cantidades vale menos de un dolar, el radio receptor es mas caro.
d) Nuevas tecnologias rfid y similares, se estan concentrando en ampliar la capacidad de memoria de almacenamiento y programacion de estos chips, asi como ampliar la capacidad de lectura de los receptores ( en otras palabras la vaca ya no solo estara trasmitiendo su numero de vaca, sino toda la informacion asociada con ella y hasta su geolocalizacion).
2.- Todos los elementos de la tabla solo deben hacer referencia hacia el mismo ente o sujeto de informacion.
Es decir si se esta construyendo la tabla alumno se esta describiendo la entidad alumno y no deben haber campos o propiedades o atributos que pertenezcan a otra entidad de informacion.
3.- Cada elemento solo representa o debe contener un y solo un dato de informacion.
La tercera regla nos indica que los campos individuales de la tabla solo podran contener datos o valores atomicos, es decir un alumno solo tiene un nombre, solo tiene una direccion, solo tiene un sexo, pero cuantos hobys tiene o cuantas canciones preferidas tiene estos dos ultimos campos no pertenecen a la tabla alumno, pertenecen a sus propias tablas.
No se respetan o siguen al pie de la letra estas tres reglas y empiezan los problemas al tiempo de programacion.
Recordar siempre una tabla almacena o representa un conjunto de datos del mismo tipo o entidad, la tabla de alumnos es para almacenar y manipular muchos alumnos, la tabla de productos es para almacenar y manipular muchos alumnos, en resumen si en un problema de informacion solo se presenta una instancia o renglon de una entidad logica, entonces no es tabla, es un encabezado.
Recordar tambien que un conjunto de tablas relacionadas entre si por ejemplo peliculas, clientes, provedores forman una BASE DE DATOS.