09/04/2009, 08:53
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses Puntos: 300 | |
Respuesta: Indices y claves foraneas en mysql Mi opinión:
Haz caso siempre de los avisos del programa.
Imagino que estarás usando tablas innoDB. Aprovecha, pues, las posibilidades que te ofrece para relacionar los campos. Y si decides hacerlo con programación, usa tablas MyISam, pero parece dar un paso atrás y requiere más programación.
Por otra parte, si no vas a relacionar esa tabla detallefactura con ninguna otra, aparentemente no parecería necesaria ninguna primary key en esa tabla. Si vas a relacionarla con alguna otra, yo crearía un id auto_increment de detallefactura, aunque por lo que dices no es tu caso. Pero tengo algunas razones para animarte a añadir ese campo id: ¿cómo corregirás un error en esa línea (registro) de detalle de factura? Me dirás que tendrás que buscar por número de factura y producto: no será más fácil buscar por número de id de detallefactura y cambiar lo que sea y devolverlo. Pues puede ocurrir que si no controlas con un índice único (o con programación) tengas en una misma factura dos líneas sobre un mismo producto. Yo añadiría el id a esa tabla para controlar mejor las actualizaciones y borrados con ese id de detallefactura.
Creo que podrías crear una primary key con los dos campos, pero necesitas haber creado previamente otro índice de cada uno de ellos y haberlos relacionado como foreign key con las primary key de las otras tablas.
Por otra parte, tal y como tienes la estructura, en verdad lo que necesitas es indexar los dos campos de la tabla detallefactura que usarás como foreign key (idfactura e idarticulo) y relacionarlos con sus respectivos primary key en las otras dos tablas. Pero, como te digo, controlas mejor todo con ese id de detallefactura.
Así mismo, si no quieres repetir en la misma factura un mismo producto, puedes crear además un índice único UNIQUE de dos columnas, concretamente con idfactura e idarticulo, en la tabla detallefactura, índice que evitará las repeticiones de un tipo de artículo en distintas líneas de una misma factura (es lo mismo que sí lo haces primary key, pero no puede funcionar como tal).
Lo que no puedes hacer es usar la misma columna (única) como primary key y foreign key en la misma tabla; eso creo.
Lo mismo te he liado más. Yo, la verdad, crearía ese id, aunque puedes usar un primary key con dos columnas, que, por lo demás, ya están indexadas.
Última edición por jurena; 09/04/2009 a las 09:15 |