Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Dos opinionenes de Base de datos (https://www.clubdelphi.com/foros/showthread.php?t=46574)

jordan23 03-08-2007 18:46:31

Dos opinionenes de Base de datos
 
1) Que opinan de una base de datos de la cual sus tablas no maneje llaves foraneas es decir que no haya relaciones??? que ventajas o desventajas podría tener??

2) Y un tema que ya me ha tocado debatir las Las llaves primarias de una tabla deben hacer referencia a un campo o grupo de campos??? por ejemplo CodigoArticulo o las llaves debe primarias solo debe ser un campo??? por ejemplo incremental??? IdArticulo

Agradeceré sus repuestas.:)

jhonny 03-08-2007 19:00:34

Mi opinion:

1) Una BD sin llaves foraneas, corre el riesgo de que tenga datos inconsistentes, como ejemplo:

Tengo una tabla de clientes y otra de movimiento de cliente, pero el dia de mañana le hicieron una factura al cliente 55555 que no existe. Me quedaria un moviemiento en la tabla MovClientes de un cliente inexistente, lo cual es una inconsistencia.

2) Eso depende de tu necesidad, en algunas tablas vas a necesitar un grupo de campos para definir la llave primaria, pero en otros casos solo necesitaras un campo para definirla.

roman 03-08-2007 20:44:39

1) Una base así no vale dos cacahuates.

2) Yo prefiero usar llaves que no involucren ningún dato significativo. Hay llaves naturales, como el SSN de los gringos, el RFC mexicano o los RUTs, que podrían usarse como llaves primarias por el mero hecho de ser únicas. Pero cualquier error en la captura, dará dolores de cabeza para corregirlo, porque estará en todas las tablas que tengan ese campo como llave foránea. Luego entonces, prefiero usar llaves artificiales, y para ello basta un sólo campo, p. ej. un autoincremental.

// Saludos

mamcx 03-08-2007 21:29:18

Concuerdo con roman. Usar siempre AutoIncs para las llaves... ademas se elimina la necesidad de hacer un UPDATE en cascada si se llega a cambiar (que pasa).

Un semi-desventaja es no tener el dato "a la mano" en las tablas hijas, como en el caso de un detalle de factura, pero para eso son las vistas!

roman 03-08-2007 21:45:56

Cita:

Empezado por mamcx (Mensaje 220137)
Un semi-desventaja es no tener el dato "a la mano" en las tablas hijas, como en el caso de un detalle de factura, pero para eso son las vistas!

Eso sí; termina uno teniendo tablas con muchos números que no nos dicen nada y puede ser bastante impráctico para revisar datos a pie, fuera del sistema. Los joins están a la orden. En algunos casos, además de las llaves artificiales, dejo los campos que en otras circunstancias habrían sido llaves foráneas, para evitar tanto join, pero sólo como referencia.

// Saludos

jordan23 03-08-2007 22:16:22

Muy interesantes sus respuestas las cuales agradezco mucho.:)

AzidRain 04-08-2007 00:55:24

Yo coincido con Roman, siempre uso claves artificiales excepto cuando hay algun campo candidato a clave única que no tenga forma de introducir errores de captura, por ejemplo: un número de factura.

Te comento que además los incrementales tienen la gran ventaja de que (al menos en MySQL y tablas MyISAM) puedes usar varios a la vez y el motor se encarga de ir creando categorias. Por ejemplo para un pedido y sus lineas, defino el pedido con una clave autoinc para la primaria y la tabla de lineas le pongo un campo "normal" que contiene la clave externa y un campo autoinc ambos como clave primaria de manera que MySQL en automático me va generando numeros de línea independientes para cada pedido.

delphi.com.ar 04-08-2007 02:31:09

Cita:

Empezado por jordan23 (Mensaje 220080)
1) Que opinan de una base de datos de la cual sus tablas no maneje llaves foraneas es decir que no haya relaciones??? que ventajas o desventajas podría tener??

¿Que opinarías si Ford produce un automóvil nuevo solo con la tecnología de su modelo T?.... No solo se trata de evitar problemas de integridad, sino que también las cláves foráneas facilitan la comprensión del modelo de datos, asisten al optimizador al realizar consultas....


Cita:

Empezado por jordan23 (Mensaje 220080)
2) Y un tema que ya me ha tocado debatir las Las llaves primarias de una tabla deben hacer referencia a un campo o grupo de campos??? por ejemplo CodigoArticulo o las llaves debe primarias solo debe ser un campo??? por ejemplo incremental??? IdArticulo

El segundo punto coincido totalmente con lo expuesto por Román, y agrego que de ser necesario crees claves únicas para los campos que sepas no se repetirán.

Neftali [Germán.Estévez] 16-08-2007 12:58:23

Cita:

Empezado por jordan23 (Mensaje 220080)
(1)...ventajas o desventajas podría tener??

(2)...Las llaves primarias de una tabla deben hacer referencia a un campo o grupo de campos???

(1) Ventajas, no le veo ninguna, como desventaja basta nombrar "La inconsistencia de Datos"; Para cualquiera que se preocupe un poco por los datos esa sólo frase debería ser suficiente.
(2) En algun sitio he leído que las claves autoincrementales son más eficientes (apostaría que es más, por ser numérico que por compuesta), y tiene sentido, pero realmente creo que estamos hablando de porcentajes de eficiencia muy bajos.
Yo suelo usar ID y luego lo que sería la clave compuesto con un indice único.


La franja horaria es GMT +2. Ahora son las 13:50:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi