Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Principiante en MySQL

Estas en el tema de Principiante en MySQL en el foro de Mysql en Foros del Web. Hola. Debo normalizar una BBDD de artículos, pero no tengo la menor experiencia en ese fino arte y mi tiempo se agota porque es un ...
  #1 (permalink)  
Antiguo 25/02/2006, 16:58
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años, 1 mes
Puntos: 0
Principiante en MySQL

Hola. Debo normalizar una BBDD de artículos, pero no tengo la menor experiencia en ese fino arte y mi tiempo se agota porque es un trabajo a entregar en ausencia del programador.

Tenemos:

-categoría
-sub categoria
-nombre de articulo
-su foto
-su descripcion
-su precio

Si alguien puede darme una idea, lo agradezco.
  #2 (permalink)  
Antiguo 27/02/2006, 14:14
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Yo sólo le colocaría un id de articulo. Ahora, hay que diseñar las otras tablas que tienen relación con la tabla articulos, imagino, una tabla ventas o compras, etc.
  #3 (permalink)  
Antiguo 27/02/2006, 14:53
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años, 1 mes
Puntos: 0
tablas

Hola Claudio.
En realidad solo muestra los articulos, sin pretensiones de ventas o compras.

Es decir, armo una tabla para cada uno de esos items (categoria, sucategoria, nombre, foto, descripcion y precio), y trabajo con un id_articulo.?
  #4 (permalink)  
Antiguo 28/02/2006, 08:34
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Crea un par de tablas con sus respectivos campos:

Categorias:
- id_categoria
- categoria

Subcategorias
- id_categoria
- id_subcategoria
- subcategoria

Articulos:
- id_categoría
- id_subcategoria
- id_articulo
- nombre
- foto
- descripcion
- precio
  #5 (permalink)  
Antiguo 28/02/2006, 09:30
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años, 1 mes
Puntos: 0
MUCHAS GRACIAS! este modelo me va a servir de mucho !!!
  #6 (permalink)  
Antiguo 28/02/2006, 09:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 201
Antigüedad: 19 años, 1 mes
Puntos: 0
me conviene un id auto_increment en Articulos, ¿no?
  #7 (permalink)  
Antiguo 28/02/2006, 09:55
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Yo creo que si.
  #8 (permalink)  
Antiguo 26/04/2006, 12:16
 
Fecha de Ingreso: marzo-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola, pregunto ya que estoy en algo similar y entiendo bien poco...
Una vez creadas las tablas hay que realcionarlas mediante las ID no?
Como hago para mostrar en una tabla

Categoria | subcategoria | articulo | etc etc etc

Donde categoria y subcategoria me muestren los nombres y no la id?

Por otro lado, para cargar los datos via formulario tendria que hacer uno para cada tabla?
Si esto es asi, para el formulario subcategoria o articulos, las claves Id_categoria y Id_subcategoria las tiene que tomar de las correspondiente tablas no?
Bueno ni idea de esta parte


Si alquien me puede mostrar un ejemplo facil para entender el concepto mas que agradecido

Saludos
  #9 (permalink)  
Antiguo 26/04/2006, 12:59
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Con el diseño de tablas que doy ya estan relacionadas, si se quiere dar un control de integridad habría que crear los respectivos indices y cada tabla debería ser de tipo INNODB u otro que acepte integridad referencial.
Para realizar un select que entregue el nombre asociado a un clave foránea (asi se llaman) se debe usar join, ejemplo:

Código:
select categoria, subcategoria, nombre from articulos a
inner join categorias c
on a.id_categoria=c.id_categoria
inner join subcategorias s
on a.id_categoria=s.id_categoria
Para cargar datos por un formulario debes usar un formulario por cada tabla. Para el caso de tablas que tienen claves foraneas y quiere facilitar el ingreso de datos, debes permitir seleccionar la categoria con una lista combinada por ejemplo, en la cual estén las categorías y/o subcategorías.
  #10 (permalink)  
Antiguo 26/04/2006, 13:16
 
Fecha de Ingreso: marzo-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
Puntos: 0
Cita:
Iniciado por claudiovega
Con el diseño de tablas que doy ya estan relacionadas, si se quiere dar un control de integridad habría que crear los respectivos indices y cada tabla debería ser de tipo INNODB u otro que acepte integridad referencial.
Para realizar un select que entregue el nombre asociado a un clave foránea (asi se llaman) se debe usar join, ejemplo:

Código:
select categoria, subcategoria, nombre from articulos a
inner join categorias c
on a.id_categoria=c.id_categoria
inner join subcategorias s
on a.id_categoria=s.id_categoria
Para cargar datos por un formulario debes usar un formulario por cada tabla. Para el caso de tablas que tienen claves foraneas y quiere facilitar el ingreso de datos, debes permitir seleccionar la categoria con una lista combinada por ejemplo, en la cual estén las categorías y/o subcategorías.
Gracias por responder, ahora hay algo que no entiendo ( en realidad un monton pero bueno vamos con algunas cosas )

En el select que me mostras, no mostraria las id de categoria y subcategoria?
Yo lo que quiero mostrar es el nombre por ej.: categoria = id 1 / monitor , mostrar monitor y no 1

La duda en el formulario es similar, osea, que la lista del menu sea con nombres y no con numeros.

Gracias de nuevo y gracias por la paciencia, este tema me gana por cansancio!!
  #11 (permalink)  
Antiguo 26/04/2006, 14:41
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
1) El select muestra los nombres, claro está, teniendo en cuenta el nombre de los campos propuesto en mi respuesta anterior, donde indico como crear las tablas.

2) Dices crear un formulario, ¿En que lenguaje harás todo esto?
  #12 (permalink)  
Antiguo 26/04/2006, 14:49
 
Fecha de Ingreso: marzo-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
Puntos: 0
Vale decir que si tuviera
Categoria :
id_cat = 1 nombre = monitor
id_cat = 2 nombre = teclado

Subcategoria
id_sub = 1 id_cat = 1 nombre-sub = plasma
id_sub = 1 id_cat = 1 nombre_sub = plano

Articulos
id_art = 1 id_cat = 1 id_sub = 1 nombre = studioworks lg

El select me mostraria:

Monitor | plasma | studioworks lg

Si esto es asi, ya tengo parte de mi problema resuelto.

El form lo haria con Php.
En realidad trabajo con DW ( dreamweaver ) y lo retoco a mano, ya que mis conocimientos de php no son suficientes como para agarrar un notepad y hacerlo de 0

Saludos
  #13 (permalink)  
Antiguo 26/04/2006, 15:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Para el formulario podrías hacer algo asi (con mysql):

Código PHP:
<html>

<head>
  <title>Ingreso de articulos</title>
</head>

<body>
<form name="form_articulos" action="script.php" method="post">
<select name="categoria">
<option value="0">Seleccionar categoria</option>
<?php
    mysql_connect
("server","user","pass");
    
mysql_select_db("nombre_bd");
    
$sql="select id_cat, nombre from categorias";
    
$rs=mysql_query($sql);
    if(isset(
$rs) && mysql_num_rows($rs)>0)
    {
        while(
$fila=mysql_fetch_assoc($rs))
        {
?>
<option value="<?php echo $fila['id_cat'];?>"><?php echo $fila['nombre'];?></option>
<?php
        
}
        
mysql_free_result($rs);
    }
?>
</select>
<select name="subcategoria">
<option value="0">Seleccionar Subcategoria</option>
<?php
    $sql
="select id_sub, nombre-sub from subcategorias";
    
$rs=mysql_query($sql);
    if(isset(
$rs) && mysql_num_rows($rs)>0)
    {
        while(
$fila=mysql_fetch_assoc($rs))
        {
?>
<option value="<?php echo $fila['id_sub'];?>"><?php echo $fila['nombre-sub'];?></option>
<?php
        
}
        
mysql_free_result($rs);
    }
?>
</select>
<label>Nombre Articulo</label>
<input type="text" name="nombrearticulo">
<input type="submit" name="guardar" value="Guardar">
</form>
</body>

</html>
Esto muestra las listas con nombres, pero por debajo van los codigos, es decir, cuando hagas el submit el script que recibe los datos del formulario recibirá sólo los códigos y bastaria hacer esto:

Código PHP:
<?php
    
if(isset($_POST['categoria']) && $_POST['categoria']!="Elegir categoria" && isset($_POST['subcategoria']) && $_POST['subcategoria']!="Elegir Subcategoria" && isset($_POST['nombrearticulo']))
    {
        
$sql="insert into articulos values(".$_POST['categoria'].",".$_POST['subcategoria'].",'".$_POST['nombrearticulo']."')"
        
mysql_query($sql);
    }
?>
  #14 (permalink)  
Antiguo 26/04/2006, 16:07
 
Fecha de Ingreso: marzo-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
Puntos: 0
Cita:
Iniciado por claudiovega
Esto muestra las listas con nombres, pero por debajo van los codigos, es decir, cuando hagas el submit el script que recibe los datos del formulario recibirá sólo los códigos y bastaria hacer esto:

Código PHP:
<?php
    
if(isset($_POST['categoria']) && $_POST['categoria']!="Elegir categoria" && isset($_POST['subcategoria']) && $_POST['subcategoria']!="Elegir Subcategoria" && isset($_POST['nombrearticulo']))
    {
        
$sql="insert into articulos values(".$_POST['categoria'].",".$_POST['subcategoria'].",'".$_POST['nombrearticulo']."')"
        
mysql_query($sql);
    }
?>
Claudio MUCHAS GRACIAS!!!
Ya casi estoy...en serio...
Solo que....

El codigo que me pasas aca lo tengo que poner en un archivo llamado script no?
Hice eso pero me dice....

Parse error: parse error, unexpected T_STRING in script.php on line 5

Si ya se... soy malisimo en esto, pero juro que le pongo ganas

Saludos y gracias por anticipado!!!
  #15 (permalink)  
Antiguo 26/04/2006, 16:18
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Si, puedes cambiarlo si quieres a algo que diga mas, ejemplo guardar_articulo.php. Tambien podrías colocar el codigo en la misma pagina y modificar la propiedad action para que se llama a si misma al hacer el submit.

El error es por que me faltó un ; quedaría asi:

Código PHP:
<?php
    
if(isset($_POST['categoria']) && $_POST['categoria']!="Elegir categoria" && isset($_POST['subcategoria']) && $_POST['subcategoria']!="Elegir Subcategoria" && isset($_POST['nombrearticulo']))
    {
        
$sql="insert into articulos values(".$_POST['categoria'].",".$_POST['subcategoria'].",'".$_POST['nombrearticulo']."')";
        
mysql_query($sql);
    }
?>
  #16 (permalink)  
Antiguo 26/04/2006, 16:27
 
Fecha de Ingreso: marzo-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
Puntos: 0
Muchas gracias, todavia no logro que inserte los datos en la tabla articulos pero sera cuestion de seguir tratando
  #17 (permalink)  
Antiguo 20/10/2006, 12:08
 
Fecha de Ingreso: octubre-2006
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
Los Inner Joins

Hola he estado revisando esto porq me confunden un poco los JOIN, en realidad nunca los he utilizado siempre mis consultas las realizo con el WHERE, sin embargo me gustaría saber si esta consulta realizada por Claudiovega:

select categoria, subcategoria, nombre from articulos a inner join categorias c
on a.id_categoria=c.id_categoria inner join subcategorias s on a.id_categoria=s.id_categoria

se podría hacer así con el WHERE:

select categoria, subcategoria, nombre from articulos a, categorias c, subcategorias s WHERE a.id_categoria=c.id_categoria AND a.id_categoria=s.id_categoria

Esto daría los mismos resultados?
en caso de ser cierto entonces cual es la finalidad de los JOINS?
Para q fueron creados si se puede hacer lo mismo con el WHERE?
cuales son las ventajas y desventajas de utilizarlos?
cuales son las ventajas y desventajas de utilizar los WHERE?

Un millón de gracias a los q puedan responder estas preguntas.... De verdad quiero quitarme esas dudas....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:43.