03/02/2011, 05:51
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 10 meses Puntos: 574 | |
Respuesta: Novato PK primary key -- clave principal
FK foring key -- clave foranea
La PK tiene la funcion de identificador unico del elemento
La FK obliga a entrar un dato que ya exista en la taba referenciada.
En nuestro caso la FK referenciada a articulo nos asegura que no puedes inventariar un tipo de articulo que previamente no este fichado, en el caso de los departamentos controla que no puedas situar algo en un departamento in exitente.
Las FK ademas permiten controles de integridad, puedes decidir que pasa cuando se elimina por ejemplo la ficha de un articulo en la tabla referenciada, puede impedir la eliminacion si existen registros relacionados en el inventario, o lo contrario solo con eliminar la ficha eliminará los registros relacionados.
Si te fijas en la tercera tabla de la que te he propuesto solo va aguardar identificadores numericos y eso tiene muy poco peso mientras que si guardas las descripciones n veces ocupa mucho espacio, además "mesa redonda" es distinto de "mesa redonda" (dos espacios) o peor tambien es distinto de "mesa redonda " (espacio al final). Departamentos
1 Matematicas
2 Lengua
3 Lengua estrangera Articulos
1 Mesa redonda
2 Mesa cuadrada Inventario
1 1 1 25 <--- seria la mesa redonda numero 25 localizada en Matematicas
2 1 2 32 <--- seria la mesa cuadrada numero 32 localizada en Matematicas
3 2 1 26 <--- seria la mesa redonda numero 26 localizada en Lengua
....
esto ocupa menos espacio y es mucho mas eficiente para la gestion de la bbdd que Departamentos
1 Matematicas
2 Lengua
3 Lengua estrangera Articulos
1 Mesa redonda
2 Mesa cuadrada Inventario
1 Matematicas Mesa redonda 25 <--- idem
2 Matematicas Mesa cuadrada 32 <--- idem
3 Lengua Mesa redonda 26 <--- idem
....
(esta tabla es mucho mas pesada que la anterior por razones obvias...)
Los depatamentos pueden entrar los datos en una misma tabla mientras identifiquen como propio cada registro, esto te permite crear un INDICE UNICO sobre CODIGO con lo que te aseguras que no se indentifique con el mismo codigo dos elementos...
Una secilla consulta
SELECT * FROM inventario WHERE idDepartamento=X
te da el inventario del departamento X
o si la sofisticamos
SELECT * FROM inventario INNER JOIN articulos ON inventario.idArticulo=articulos.idArticulo WHERE inventrio.idDepartamento=X
te da lo mismo pero con todos los datos de cada articulo (nombre descripcion....)
En cuanto a ordenar por fechas
SELECT * FROM inventario INNER JOIN articulos ON inventario.idArticulo=articulos.idArticulo WHERE inventrio.idDepartamento=X
ORDER BY inventario.fecha
__________________ Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados. |