lunes, 7 de mayo de 2012

imagen1

imagen2

imagen3

imagen4

imagen5



Creación de bases de datos

¿Qué es una tabla?
Como por ejemplo en Word, una tabla es una lista de datos, organizados por columnas y filas. Por ejemplo, la siguiente tabla muestra unas películas dentro de una lista.
 imagen 1.
Dentro de un sistema gestor de bases de datos, la información se puede organizar dentro de tablas, en las que solo tendremos que decidir qué columnas queremos que tenga y de que tipo va a ser la información que tendrán (Numérico, texto, etc)
Creando una base de datos
El nombre de nuestra base de datos será Videoteca. Se  abrirá una  ventana, donde abajo del todo veremos “Crear una base de datos”, en ella escribiremos el nombre de nuestra nueva base de datos, en este caso: Videoteca.

imagen 2

PD: en lo nombres no podemos escribir caracteres como, comas, acentos, ñ, etc.
Si todo ha ido bien, ahora nos pondrá que ya esta creada.

imagen 3

Crear tablas y campos para la base de datos
En el apartado anterior hemos aprendido a crear una base de datos MySQL, y he creado una, a la cual la he llamado “Videoteca”. Ahora el siguiente paso seria crear las tablas y los campos que nos hagan falta para posteriormente meter los datos.
Creando una Tabla y sus campos en MySQL
Existen varias formas y programas diferentes para crear una tabla en una base de datos MySQL, como  phpMyAdmin, el motivo de hacerlo desde phpMyAdmin y no de otra forma es porque comúnmente, en todos los servidores ya sean caseros o de un hosting privados siempre suele tener un phpMyAdmin a mano.
En primer lugar vamos a nuestro phpMyAdmin y seleccionamos la base de datos que hemos creado anteriormente (Videoteca) como vemos en la siguiente imagen:

imagen 4

Ahora se cargara la base de datos y nos saldrá un mensaje que pone “no se han encontrado tablas en la base de datos” y más abajo veremos un pequeño formulario para crear nuestra primera tabla.
En nombre pondremos película y en número de campos pondremos 3.

imagen 5

Ahora damos a continuar y se nos cargara la pagina para crear los campos, en este caso serán los 3 que hemos puesto antes.
Veremos que tendremos que rellenar varios datos, pero no tenemos que preocuparnos, ya que explicaremos uno a uno lo que significa.
·         En Campo, pondremos el nombre del campo.
·         En Tipo, debemos poner el tipo de datos que se van a incluir en el campo, por ejemplo pondríamos:
o    VARCHAR si vamos a incluir un texto inferior a 255 caracteres ejemplo (nombres, DNI, direcciones).
o    TEXT si vamos a incluir un texto más largo de 255 caracteres ejemplo (noticias).
o    INT si deseamos escribir exclusivamente números.
o    DATE para poner fechas, o DATETIME, si queremos poner hora y fecha.
·         En Longitud, deberemos de poner el número de caracteres máximo que puede contener dicho campo, esto no hace falta para todos los tipos de datos, ya que por ejemplo para los de tipo DATE, o TEXT no hace falta, pero para los INT y VARCHAR es imprescindible.
·         En Nulo, podemos elegir Null o Not Null dependiendo si queremos que el campo pueda estar vacío (sin datos) o no.
·         En predeterminado, podemos poner lo que queramos que se ponga en el campo en el caso de que no se rellenen los datos o que se rellene de forma incorrecta.
·         En extra, vemos que podemos seleccionar Auto_Increment, esto nos sirve para llevar un orden de los datos que tenemos, por ejemplo, creamos un campo llamado id, de tipo INT y le ponemos auto_increment, de esta forma cada vez que se cree un nuevo dato en este campo se le sumara 1 a la id anterior, de forma que podremos llevar un pequeño orden.
Debemos de poner en cada uno de los 3 campos:
Campo 1
Nombre: id_pelicula
Tipo: INT
Nulo: Not Null
Extra: Auto_increment
Y marcamos la llave de Primaria Descripción: http://www.cristalab.com/images/tips/php/crear-mysql/crear-mysql07.png
Campo 2
Nombre: pelicula
Tipo: VARCHAR
Longitud: 30
Nulo: Not Null
Campo 3
Nombre: Director
Tipo: VARCHAR
Longitud: 30
Nulo: Not Null
Índice
Un índice (o KEY, o INDEX) es un grupo de datos que MySQL asocia con una o varias columnas de la tabla. En este grupo de datos aparece la relación entre el contenido y el número de fila donde está ubicado.
Los índices -como los índices de los libros- sirven para agilizar las consultas a las tablas, evitando que mysql tenga que revisar todos los datos disponibles para devolver el resultado.
Creación de índices
Podemos crear el índice a la vez que creamos la tabla, usando la palabra INDEX seguida del nombre del índice a crear y columnas a indexar (que pueden ser varias):
INDEX nombre_indice (columna_indexada, columna_indexada2...)

La sintaxis es ligeramente distinta segun la clase de índice:
PRIMARY KEY (nombre_columna_1 [,nombre_columna2...]) UNIQUE INDEX nombre_indice (columna_indexada1 [,columna_indexada2 ...]) INDEX nombre_index (columna_indexada1 [,columna_indexada2...])
Podemos también añadirlos a una tabla después de creada:
ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada);
Si queremos eliminar un índice: ALTER TABLE tabla_nombre DROP INDEX nombre_indice¿para que sirven ?
LOs index permiten mayor rápidez en la ejecución de las consultas a la base de datos tipo SELECT ... WHERE
La regla básica es pues crear tus índices sobre aquellas columnas que vayas a usar con una cláusula WHERE, y no crearlos con aquellas columnas que vayan a ser objeto de un SELECT: SELECT texto from tabla_libros WHERE autor = Vazquez; En este ejemplo, la de autor es una columna buena candidata a un indice; la de texto, no.

Otra regla básica es que son mejores candidatas a indexar aquellas columnas que presentan muchos valores distintos, mientras que no son buenas candidatas las que tienen muchos valores idénticos, como por ejemplo sexo (masculino y femenino) porque cada consulta implicará siempre recorrer prácticamente la mitad del índice
.

MyISAM
Es la tecnología de almacenamiento de datos usada por defecto por el sistema administrador de bases de datos relacionales MySQL. Este tipo de tablas están basadas en el formato ISAM pero con nuevas extensiones. En las últimas versiones de MySQL, el motor InnoDB está empezando a reemplazar a este tipo de tablas por su capacidad de ejecutar transacciones de tipo ACID y bloqueo de registros e integridad referencial.
Cada tabla de tipo MyISAM se guarda en tres archivos. Los archivos tienen el nombre de la tabla y una extensión que indica el tipo de archivo,
§  .frm almacena la definición de la tabla
§  .MYD (MyData) contiene los registros de la tabla
§  .MYI (MyIndex) contiene los índices de la tabla
Para: especificar que deseas usar el tipo de tablas MyISAM, se indica con la opción ENGINE al crear la tabla o modificarla, por ejemplo
   CREATE TABLE t (i INT) ENGINE = MYISAM;
La principal característica de este tipo de almacenamiento es la gran velocidad que obtiene en las consultas, ya que no tiene que hacer comprobaciones de la integridad referencial, ni bloquear las tablas para realizar las operaciones por la ausencia de características de atomicidad. Este tipo de tablas está especialmente indicado para sistemas que no tienen un número elevado de inserciones como pueden ser las páginas web.


Creación de tablas
Muchas son las opciones que se ofrecen al generar tablas. No vamos a tratarlas detalladamente pues sale de lo estrictamente práctico. Tan sólo mostraremos algunos de los tipos de campos que pueden ser empleados en la creación de tablas con sus características:
Tipo
Bytes
Descripción
INT o INTEGER
4
Números enteros. Existen otros tipos de mayor o menor longitud específicos de cada base de datos.
DOUBLE o REAL
8
Números reales (grandes y con decimales). Permiten almacenar todo tipo de número no entero.
CHAR
1/caracter
Alfanuméricos de longitud fija predefinida
VARCHAR
1/caracter+1
Alfanuméricos de longitud variable
DATE
3
Fechas, existen multiples formatos específicos de cada base de datos
BLOB
1/caracter+2
Grandes textos no indexables
BIT o BOOLEAN
1
Almacenan un bit de información (verdadero o falso)


Las tablas InnoDB
Creación de una tabla InnoDB
La creación de tablas de este tipo no presenta ninguna dificultad añadida. El proceso es idéntico a las tablas habituales sin más que añadir Type=InnoDB después de cerrar el paréntesis de la sentencia de creación de la tabla.
Este script crea una tabla InnoDB con idénticos campos a los utilizados en el caso de la tabla MyISAM que hemos visto en páginas anteriores. La sintaxis, muy similar a la utilizada allí es esta:
<?php
#definimos (en minusculas) el nombre de la nueva tabla
$tabla="demoinno";
# escribimos la cadena que contiene la sentencia de creación de la nueva tabla
$crear="CREATE TABLE  $tabla (";
$crear.="Contador TINYINT(8)  UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,";
$crear.="DNI CHAR(8) NOT NULL,  ";
$crear.="Nombre VARCHAR (20)  NOT NULL, ";
$crear.="Apellido1 VARCHAR (15)  not null, ";
$crear.="Apellido2 VARCHAR (15)  not null, ";
$crear.="Nacimiento DATE DEFAULT '1970-12-21', ";
$crear.="Hora TIME DEFAULT '00:00:00', ";
$crear.="Sexo Enum('M','F') DEFAULT 'M' not null, ";
$crear.="Fumador CHAR(0) , ";
$crear.="Idiomas SET(' Castellano',' Francés','Inglés',
         ' Alemán',' Búlgaro',' Chino'), ";
$crear.=" PRIMARY KEY(DNI), ";
$crear.=" UNIQUE auto (Contador)";
$crear.=")";
# esta es la única diferencia con el proceso de
# creación de tablas MyISAM
 $crear.=" Type=InnoDB";
/* tenemos completa la sentencia MYSQL  solo falta ejecutarla crear la conexión y ejecutarla */

/*incluimos los parámetros de conexión */
include('mysqli.inc.php');
/* incluimos dos opciones de proceso y de programacion orientada a objetos. Podemos ejecutar
los ejemplos pasado mediante el metodo GET el tipo elegido.  */

    if(!empty ($_GET['tipo'])){
        $tipo_script=$_GET['tipo'];
    }else{
        $tipo_script="objetos";
    }


/*En caso de tipo proceso utilizaríamos esto */

if ($tipo_script=="proceso"){
    /******    Programación mediante procesos ***********/
    #conexion, selección de base de datos y verificacion de errores segun ejemplos anteriores
    $conexion=@mysqli_connect ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);
    if(!mysqli_connect_errno()==0){
        print "<Mbr>No ha podido realizarse la conexión mediante procesos<br>";
        print "Error número: ". mysqli_connect_errno()." equivalente a: ". mysqli_connect_error();
        exit();
    }
    # Creación. Los parámetros requieren el orden aquí indicado al revés del caso mysql

    if(mysqli_query($conexion,$crear)){
            print "La tabla ha sido CREADA";
    }else{
            print "<br>No ha podido crearse la base de datos mediante procesos<br>";
            print "Error : ". mysqli_error($conexion);
            exit();
    }
    mysqli_close($conexion);

}

/* en caso de programacion orientada a objetos */
if ($tipo_script=="objetos"){
      #conexion, selección de base de datos y verificacion de errores segun ejemplos anteriores
    $objeto=@new mysqli ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);
    if(!$objeto->connect_errno==0){
        print "
No ha podido realizarse la conexión mediante objetos<br>";
        print "Error número: ". $objeto->connect_errno." equivalente a: ". $objeto->connect_error;
        exit();
    }

    if($objeto->query($crear)){
            print "La tabla ha sido CREADA";
    }else{
                       print "<br>No ha podido crearse la tabla mediante objetos<br>";
            print "Error : ". $objeto->error;
            exit();
    }

    $objeto->close();
}
?>