![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
![]() // Saludos |
|
#2
|
||||
|
||||
|
Cita:
Ahora bien, yo me inclino a pensar, con todo respeto, a que erickperez6 quizá esté confundiendo (o más posiblemente, mezclando) el concepto de clave foránea con algún otro. Por ello lancé el trabalenguas... para mi que hay algo que no está del todo claro. ¡y que va... que ya estoy hecho un disco rayado! ¡que algo tengo con la palabra algo! ![]() Saludos, |
|
#3
|
|||
|
|||
|
Señores:
Disculpen en disentir con la mayoría de Uds. en cuanto a que las llaves foráneas se deben de declarar implícitamente si se desea relacionar dos tablas. Existe otra técnica de relacionar tablas utilizando disparadores. Siiii ya se que van a decir que esto conlleva a un mayor esfuerzo en la programación, sin embargo el beneficio de hacer esto es justamente lo que decía Erick Pérez (quien inició este hilo), en cuanto una mejora significativa en cuanto al desempeño de la base de datos cuando hay inserciones y actualizaciones masivas. Saludos, Gerardo Suárez Trejo |
|
#4
|
||||
|
||||
|
Para nada se puede estar de acuerdo con eso, amigo Gallosuarez, las bases de datos relacionales tienen ese nombre precisamente por eso, por las relaciones. Lo que has comentado sería "reinventar la rueda" puesto que la propia base de datos ya controla esas cosas precisamente con las relaciones.
No hay ningún problema de desempeño por usar las relaciones (claves foráneas) y tal vez sí que exista algo menos de desempeño en la propuesta que has indicado. Además de que está el problema de tener que controlarlo todo y que no se te olvide ni te equivoques. De la otra manera (claves foráneas) el trabajo está hecho porque lo hace la propia base de datos.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#5
|
|||
|
|||
|
Para Gallosuarez, cuando hay inserciones masivas como por ejemplo cuando se está migrando información para una base de datos antes de colocarla en producción se pueden quitar (no recuerdo en firebird si se pueden deshabilitar como con los indices) y luego colocarlas, es mas eficiente crear una llave o indice cuando ya están montados los datos (y la estructura queda mas balanceada) que definir la llave o indice y luego montar los datos.
Para erickperez6, puedo garantizar que el sistema que mencionas que usa pocas llaves foraneas no es para bases de datos de gran tamaño y si lo fuera el rendimiento no sería el ideal, algunos fabricantes de software exigen al cliente para solventar los problemas de rendimiento el utilizar equipos más rápidos. Otro asunto es que cuando haces un sistema que lo tienen muchos clientes es más fácil mantener los problemas de diseño que corregir e ir a actualizar aplicativos a esa cantidad de clientes.
__________________
Luis Fernando Buelvas T. |
|
#6
|
|||
|
|||
|
Casimiro y Luis Fernando:
Bueno, en todo caso no solo sería a mi a quien tienen que convencer de que estoy equivocado, sino a Holger Klemt (creador de IBExpert, y reconocido desarrollador e impulsor de Firebird). Por cierto, tengo aquí a la mano el correo que recibí de IBExpert KG (empresa de Holger Klemt), invitando a las conferencias que se llevarán a cabo del 11 al 13 de Noviembre de 2010 en Bremen, Alemania. Entre las diferentes conferencias que se van a impartir hay una en particular que me llama la atención: Holger Klemt: Part-time foreign keys: using flexible triggers to replace declarative foreign keys (Holger Klemt: Llaves Foráneas de Tiempo Parcial: usando disparadores flexibles para reemplazar la declaración de Llaves Foráneas). Se aproxima la fecha y mis finanzas no andan muy bien.... además de que mi esposa y yo estamos esperando a nuestro tercer bebé... bueno ... tal vez.... para la próxima vez... Sería interesante si alguien del foro pudiera ir y nos platicara mas, no solo lo de esta conferencia en particular, si no de todas las que van a presentar. Saludos, Gerardo Suárez Trejo. P.D. Si gustan les puedo avanzar dicho correo para que no crean que hablo solo por hablar, o mejor aún, entren a la página de IBExpert y cerciórence por uds mismos que no hablo mentiras. Saludos nuevamente.... Última edición por Gallosuarez fecha: 19-10-2010 a las 02:37:36. |
|
#7
|
|||
|
|||
|
Respondiendo a Gallosuarez, claro que se pueden manejar la integridad referencial via triggers pero implica el que se definan indices para asuntos de rendimiento.
Hay algunos casos en los que ciertas tablas no son buena idea crearlas aún en aras de la flexibilidad en la parametrización de aplicaciones, por ejemplo, crear una tabla para "estado civil" sabiendo que los valores para dicha tabla son pocos y dificlmente cambian. Algunos desarrolladores crean la tabla "estado civil" y crean una llave foranea para el campo"empleado"."estado_civil". Hay un tema que se llama la "selectividad", lo ideal es que por cada valor clave de la tabla maestro haya una distribución de registros en la tabla detalle, por ejemplo, un campo "empleado"."codigo_ciudad" podría tener esa distribución, pero un campo "cliente"."sexo" no lo tendria porque por cada sexo ('M'masculino,'F'emenino, 'I'ndeterminado (se presentan algunos casos donde al bebe no se le puede dictaminar su sexo, caso hermafrodita)) la distribucion de registros es 50% y 50%, una llave foránea en este caso puede ser una mala decisión y consultas cuya clausula where hagan referencia a este campo no serían tan eficientes. Una solución es crear una tabla para conservar este tipo de valores, en algunos casos utilizo algo como esto:
y se crean triggers para el caso "cliente"."sexo" que verifiquen la existencia de valores en esa tabla. En lo personal, si una lista de valores que puede contener un campo es menor o igual que 20 datos los mando a la tabla anterior, si es mayor de 20 lo mando a una tabla y le creosu respectiva llave foránea. Para ampliar la cosa tendriamos que irnos al campo de las desnormalizaciones pero saldriamos del interes de este hilo.
__________________
Luis Fernando Buelvas T. |
|
#8
|
|||
|
|||
|
Hay una página que sigo desde hace muchos años dela cual he aprendido muchísimo, su formato no es muy bonito pero su contenido es la más alta calidad.
http://www.tdan.com/ Esta publicación es mensual, pueden entrar a "Search" para consultar artículos. Hay buenas referencias para diseño de bases de datos, normalización y desnormalizacón.
__________________
Luis Fernando Buelvas T. |
|
#9
|
|||
|
|||
|
Cita:
Cita:
[transaccionesEncabezado] EncabezadoId EncabezadoFecha clienteId vendedorId usuarioId sucursalId [transaccionesDetalle] EncabezadoId productoId unidadId productoCantidad productoPrecio Caso 1: relacion foranea1: tablas transaccionesEncabezado y transaccionesDetalle con EncabezadoId (maestro / detalle de las transacciones) ... fin de las relaciones Caso 2: relacion foranea1: tablas transaccionesEncabezado y transaccionesDetalle con EncabezadoId (maestro / detalle de las transacciones) relacion foranea2: tablas transaccionesEncabezado y clientes con clienteId relacion foranea3: tablas transaccionesEncabezado y vendedores con vendedorId relacion foranea4: tablas transaccionesEncabezado y usuarios con usuarioId relacion foranea5: tablas transaccionesEncabezado y sucursales con sucursalId relacion foranea6: tablas transaccionesDetalle y productos con productoId relacion foranea7: tablas transaccionesDetalle y unidades con unidadId ... fin de las relaciones Aunque sean mas, la verdad es que siento que puedo dormir mas tranquilo con el segundo caso ![]() Con lo que me referia al tema inicial es por qué dejar intencionalmente una relacion como el caso 1? ¿a cambio de que sacrificar la integridad de la informacion?... sera mejor performance de la db? velocidad? menos corrupcion? otras tecnicas de mantener la integridad? algo que desconozco? o simplemente es un mal diseño de la base de datos y me estoy complicando mas de la cuenta... todo viene por lo que señale al principio del post: Cita:
Última edición por erickperez6 fecha: 18-10-2010 a las 22:28:18. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Problemas con llaves foraneas | jcrg666 | MySQL | 1 | 01-04-2010 00:41:36 |
| Maneja llaves foraneas , problemitas! | richardxxx | Varios | 1 | 07-11-2008 22:42:03 |
| LLaves foraneas... | Luis Castillo | SQL | 2 | 13-11-2005 18:45:34 |
| Llaves Foraneas | RainFall | MySQL | 1 | 26-07-2004 04:19:28 |
| Llaves foraneas en BDD distintas | StartKill | Firebird e Interbase | 7 | 31-01-2004 01:14:01 |
|