Daniela 15 de septiembre de 2008 a las 16.45
   Imprimir artículo
elWebmaster.com

Taller de PHP: Nuestro blog – Creación de la base de datos


Hola, acá estoy de nuevo para continuar con nuestro propio blog. En la clase de hoy vamos a ver como va a ser la estructura de nuestra base de datos.

Básicamente vamos a tener cuatro tablas. Una de usuarios, otra de noticias, una tercera con las categorías que van a tener las noticias y finalmente una tabla con los comentarios a las noticias.

Estructura de la base de datos de nuestro blog:

Tabla: usuarios

Field Type Null Key Default Extra
idUsuario int(11) PRI NULL auto_increment
usuario varchar(50)
password char(32)
email varchar(50)
tipo enum(‘comun’,’admin’) comun

Sintaxis sql para crear la tabla:

  1. CREATE TABLE `usuarios` (
  2. `idUsuario` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `usuario` VARCHAR( 50 ) NOT NULL ,
  4. `password` CHAR( 32 ) NOT NULL ,
  5. `email` VARCHAR( 50 ) NOT NULL ,
  6. `tipo` ENUM( 'comun', 'admin' ) NOT NULL DEFAULT 'comun'
  7. ) ENGINE = MYISAM ;

Hacemos que idUsuario sea la primary key con un autoincrement para que se vaya sumando a medida que se van registrando nuevos usuarios, también ponemos que el campo usuario tenga un varchar de 50, ya que no sabemos qué tan largos pueden llegar a ser los nombres de usuarios elegidos por los mismos, lo que sí podemos hacer es limitárselo a 50.

Por otro lado el campo password va a tener siempre un ancho de 32 caracteres, porque para mayor seguridad vamos a usar una codificación md5 y los códigos que genera la misma tienen siempre la misma cantidad de caracteres.

El campo email es igual que el del usuario y el de tipo es con un enum, ya que solo vamos a tener dos tipos de usuarios.

Por otro lado tenemos la tabla de noticias:

Tabla: noticias

Field Type Null Key Default Extra
idNoticia int(11) PRI NULL auto_increment
titulo varchar(50)
copete varchar(255)
cuerpo text
idUsuario int(11)
idCategoria int(11)
fPublicacion timestamp
fCreacion timestamp
fModificacion timestamp

Sintaxis sql para crear la tabla:

  1. CREATE TABLE `noticias` (
  2. `idNoticia` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `titulo` VARCHAR( 50 ) NOT NULL ,
  4. `copete` VARCHAR( 255 ) NOT NULL ,
  5. `cuerpo` TEXT NOT NULL ,
  6. `idUsuario` INT( 11 ) NOT NULL ,
  7. `idCategoria` INT( 11 ) NOT NULL ,
  8. `fPublicacion` TIMESTAMP NOT NULL ,
  9. `fCreacion` TIMESTAMP NOT NULL ,
  10. `fModificacion` TIMESTAMP NOT NULL
  11. ) ENGINE = MYISAM ;

No hay mucho que explicar en esta, también tenemos una primary key en idNoticia para identificar a cada una, tenemos una relación 1 a muchos entre una noticia y un usuario, es decir, una noticia puede tener un sólo autor pero un autor puede tener muchas noticias. Lo mismo con las categorías, una noticia puede tener una sola categoría pero una categoría puede tener muchas noticias.

Y también tenemos tres campos de fechas, uno para la fecha de publicación de la noticia, otra para la fecha en que se creó y finalmente cuando se modificó.

Para la tabla de categorías vamos a tener:

Tabla: categorías

Field Type Null Key Default Extra
idCategoria int(11) PRI NULL auto_increment
valor varchar(50)

Sql:

  1. CREATE TABLE `categorias` (
  2. `idCategoria` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `valor` VARCHAR( 50 ) NOT NULL
  4. ) ENGINE = MYISAM ;

Y finalmente la tabla de comentarios:

Tabla: comentarios

Field Type Null Key Default Extra
idComentario int(11) PRI NULL auto_increment
comentario text
idUsuario int(11)
idNoticia int(11)
estado enum(‘sin validar’,’apto’) sin validar
fCreacion timestamp

Sql:

CREATE TABLE `comentarios` (
`idComentario` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`comentario` VARCHAR( 255 ) NOT NULL ,
`idUsuario` INT( 11 ) UNSIGNED NOT NULL ,
`idNoticia` INT( 11 ) UNSIGNED NOT NULL ,
`estado` ENUM( 'sin validar', 'apto' ) NOT NULL DEFAULT 'sin validar',
`fCreacion` TIMESTAMP NOT NULL
) ENGINE = MYISAM ;

En esta tabla tenemos también una relación 1 a muchos con los usuarios, ya que un comentario puede tener un único usuario pero un usuario puede tener muchos comentarios, lo mismo para las noticias.

Por otro lado tenemos un estado, ya que apenas un usuario escribe un comentario el mismo está sin validar por un administrador, en este punto podemos optar por mostrar o no los comentarios no validados (igual todavía no estamos en esa disyuntiva) y los mismos aparecerán en un listado general para que un admin los apruebe o los borre.

Y por último tenemos la fecha de creación del mismo.

Bueno, espero que les haya gustado la forma en que diagramamos nuestro blog, ya apartir de la clase que viene vamos a empezar con la codificación del mismo.

<< CLASE ANTERIOR

CLASE SIGUIENTE >>


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (21)

  1. Victor San Martin dice:

    Estimado, hasta que nivel de normalización estan esas entidades (tablas) que creaste.
    Por si hablamos de un nivel 3, tienes muchos errores de orden, por ejemplo
    – En las base de datos no se utilizan nombres del tipo idUsuario, sino id_usuario o usuario_id, tu estas ocupando la forma de nombrar metodos y variables en OO, y aca es otro tema.
    – Otra cosa con respecto al nombre del campo, solo se ocupan nombre en minusculas y que sean representantivos de la entidad y dato a contener, por ejemplo: “fCreacion” no me dice nada, en cambio “fecha_creacion” si me da un dato, o mas aún, si el campo es del tipo DATE o DATETIME simplemente ocupa “creacion”, ya con ver el tipo se automaticamente que es una fecha.

    Eso de los nombres en minusculas es para un mayor orden, recuerda que cuando haces una consulta a la BBDD (si no ocupas alguna capa abstracta que haga el trabajo por ti) las consultas tb tienen su nomenclatura, palabras reservadas en mayuscula y lo propio en minusculas por ejemplo:

    SELECT COUNT(*) FROM `comentarios` WHERE `id` = 1

    No es lo mismo que:
    select count(*) from comentarios where id = 1

    Bueno cabe decir, que lo que estas haciendo no esta malo, al contrario esta muy bien, solo que a veces hacer caso a las convenciones ayuda a un entendimiento mas rapido, sobre todo en equipo de trabajos.

    Ah otra cosa, ten cuidado el excesivo uso de ENUM, son traicioneros cuando piensas en sistemas escalables.

    Saludos.

  2. Alejandro dice:

    ok pero para integrarlo en codigo php ? yo estoy comenzando a trabajar con MySql y tengo unos problemas con la integracion a php gracias….

  3. Alejandro dice:

    y esta buenisimo estos tutoriales, lastima q son cada semana

  4. Alejandro dice:

    con una pregunta | como se puede hacer un select en base a datos de una tabla de datos, osea ir a traer todos los datos q se despliegan de una tabla de la db??

  5. juliopablo dice:

    man esto esta mal :
    CREATE TABLE `usuarios` (
    `idUsuario` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `usuario` VARCHAR( 50 ) NOT NULL ,
    `password` CHAR( 32 ) NOT NULL ,
    `email` VARCHAR( 50 ) NOT NULL ,
    `tipo` ENUM( ‘comun’, ‘admin’ ) NOT NULL DEFAULT ‘comun’
    ) ENGINE = MYISAM ;

    CREATE TABLE `comentarios` (
    `idComentario` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `comentario` VARCHAR( 255 ) NOT NULL ,
    `idUsuario` INT( 11 ) UNSIGNED NOT NULL ,
    `idNoticia` INT( 11 ) UNSIGNED NOT NULL ,
    `estado` ENUM( ’sin validar’, ‘apto’ ) NOT NULL DEFAULT ’sin validar’,
    `fCreacion` TIMESTAMP NOT NULL
    ) ENGINE = MYISAM ;

    `tipo` ENUM( ‘comun’, ‘admin’ ) NOT NULL DEFAULT ‘comun’
    `estado` ENUM( ’sin validar’, ‘apto’ ) NOT NULL DEFAULT ’sin validar’,

    no se pero tube que borrar eso para que pueda procesar el sql …

  6. daury dice:

    STAFF:: DE EL WEBMASTER por favor arreglen las tablas..por favor– a mi tambien me pasa lo mismo-

  7. Justi dice:

    hola, el problema es que wordpress cambia los simbolos, en los enum en lugar de esas comillitas raras van ‘ (apostrofes), quedaria asi:

    `tipo` ENUM( ‘comun’, ‘admin’ ) NOT NULL DEFAULT ‘comun’

  8. daury dice:

    Grasias …. muchisimas grasias ahora si puedo aprender..
    Grasias suerte que ya lo arreglarom

  9. cristian dice:

    muy bueno lo de php me sirve de mucho; ahora lo que me gustaria es que me enviasen pasos de que o como hacer entre MySQL y Dreamweaver al crear la base de datos, insertar del lado del usuario una imagen. Yo cree un campo llamado imagen en MySQL y asigne la opcion (BLOB) _no null), despues me dirigi a insercion de formulario de registro, y una vez creada la base de datos no supe el como y que hacer para examinar una imagen y que al hacer click en insertar registro nunca inserto una imagen del lado del usuario y si me tomaba como texto, dandome como error 404, pero de igual forma no entendi ya que cuando verifique en (MySQL my manager) veia una hojita en blanco como que de forma correcta inserto la imagen, mientras que en dreamweaver nunca fue visto la imagen y es esa mi duda, del que y como hacer para que de forma correcta pueda insertar imagenes con (MySQL my manager) una vez creada la base de datos. Espero alguna respuesta urgente, confio en ustedes ya que son muy buenos y exelentes webmasters sigan asi y no cambien ¡Suerte y exitos!

  10. cristian dice:

    mandenmen a mi correo las respuestas del como insertar imagen con MySQL una vez creada la base de datos o sea que MySQL permita que se inserte imagenes del lado del usuario y no que ne tome como texto dandome error. mi correo es cristian_ctc@hotmail.com, espero respuestas ¡gracias!

  11. Justi dice:

    hola cristian, te conviene subir la imagen al servidor de archivos y en la base de datos dejar registro de donde esta guardada esa imagen solamente. Sino se puede llegar a corromper la base si guardas los archivos en la misma.

    Saludos.

  12. cristian dice:

    justi vos decis copiar y pegar en MySQL la imagen, si es asi podrias pasarme los pasos de como poder copiar y pegarlo la imagen en MySQL, espero tu respuesta ¡Gracias!

  13. cristian dice:

    JUSTI ME GUSTARIA QUE ME PASARAS TU CORREO ASI LOS FINES DE SEMANA NOS PONEMOS EN CONTACTO PARA ASI SACARNOS TODAS LAS DUDAS ¡ESPERO TU RESPUESTA, SUERTE!

  14. Justi dice:

    No cristian, lo que yo digo es que leas todo el taller de php, vas a ver que esta explicado como subir fotos con php y guardar la info en la base de datos.
    saludos.

  15. César dice:

    Hola Justi me parece muy bueno este y los demás tutos apenas termine de realizar este pero tengo un pequeño gran problema… no se llenan los datos en la base de datos
    gracias por la pronta ayuda

  16. Justi dice:

    @César hola, debes estar teniendo algo mal en la consulta

  17. sebas dice:

    Hola muy bueno el taller, justi te felicito excelente taller hiciste.

    me surgio un problema, en el panel de control, mas exactamente en la seccion categorias, donde tengo que crear las mismas me tira el siguiente error:

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\blog\admin\categorias.php on line 88

    la linea 88 tiene lo siguiente:

    while ( $row = mysql_fetch_assoc ($resultado) ) {

    el script entero es el siguiente:

    $arrCategorias = array();
    $query = “SELECT idCategoria, valor FROM `categorias` ORDER BY valor ASC”;
    $resultado = mysql_query ($query, $dbConn);
    while ( $row = mysql_fetch_assoc ($resultado) ) {
    array_push( $arrCategorias,$row );
    }

    supongo que es por ese error por el cual no puedo crear las categorias, cuando las creo, dice que se crearon correctamente, pero en realidad no se crea nada.

    el mismo error me aparece en “administrar noticias” me podrian decir que esta mal?

    desde ya muchas gracias.

    el taller genial!!!

  18. sebas dice:

    perdon me equivoque de lugar! 😛

  19. bases empresas dice:

    Buenos dias, te queria agradecer por la informacion que brindas en tu pagina, ya que pude subsanar el inconveniente que tenia.

    Saludos.

    Nicolas.

  20. bases empresas dice:

    Hola , queria felicitarte, pues tu pagina es exelente
    te mando un abrazo .

  21. AndrezDaviz dice:

    Que tal amigo no ese que pasa pero ahora me sale un error en me sale el codigo en la parte de los imput text

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder