Discusión: Relaciones en SQL Server

Danny Cerda
15 de Agosto del 2004
Estimados, quiero iniciar una discusión acerca de Integridad de Datos y Relaciones en SQL Server 2000.
Un experimentado amigo y yo hemos discutido desde hace unos días acreca de este tema y hemos decidido acudir a este foro para obtener opiniones externas.
Se trata de lo siguiente:
En SQL Server 2000 tú tienes 2 tablas relacionadas, por ejemplo, Ventas y Clientes.
La relación la haces por el Codigo de Cliente de ambas tablas. Para exigir Integridad Referencial, exiges 'Relación para duplicación' y 'Exigir Relación para INSERT y UPDATE'. Hasta ahora todo bien. Continúo.
La regla de negocio indica que puedes realizar ventas sin necesidad de establecer el Cliente al que se estás vendiendo, lo que indica que nuestra relación debe permitir, ó dejar el campo Nulo o crear un cliente 0=Ninguno, y seleccionar este cada vez que se realice una venta sin cliente.
Para mí, lo óptimo es establecer que el campo Codigo_Cliente en la tabla Ventas acepte nulos, guardandolo NULL cada vez que se realice una venta sin cliente, y manteniendo, claro, la relación para las validaciones correspondientes. Para mi amigo, en cambio, esto NO es Integridad referencial ni Integridad de Datos, y prefiere crear el cliente 0=Ninguno.
Espero sus comentarios. Gracias.

Chatarra
15 de Agosto del 2004
Empezaré diciendo que tu amigo tiene toda la razón. Si quieres establecer integridad referencial en esa relación para actualización y eliminación, los campos tienen que ser claves principales, y las claves principales no admiten valores nulos, no hay excepción a esa regla. La solución que propone tu amigo es válida para el tipo de diseño de la base de datos que estas realizando. Puede haber una forma de permitir el campo Nulo pero con otro diseño en la base de datos, y por supuesto con otras relaciones que te aseguren la integridad referencial

Chatarra
15 de Agosto del 2004
Aprovecho para hacer una consulta sobre relaciones en SQL. He trabajado toda la vida en Access pero he hecho una base de datos que tenía que pasarla a SQL Server. Hice un conversión de la base de Access que ya tenía a SQL Server con el asistente de Access para poder administrar la base de datos con un proyecto .adp. El problema fue que muchas de las propiedades de la base se perdieron durante la conversión entre ellas una de las relaciones entre las tablas, y ahora no puedo volver a crearla desde el proyecto adp. La cuestión debería funcionar así: tengo una tabla Libros, con campos PaisPublicacion y PaisUbicación, relacionada con la tabla Paises. Debería tener dos relaciones separadas, desde Paises.Pais hacia Libros.PaisPublicacion y Paises.Pais hacia Libros.PaisUbicacion y ambas con integridad referencial para actualización, pero no se me permite crear las dos con estas propiedades, solo una. Ahy alguna forma de hacerlo?

Hector
15 de Agosto del 2004
Hola

Creo que tu amigo tiene toda la razón, esto para no perder la consistencia de los datos ya que como tu dices el codigo del cliente es crucial para relacionar ambas tablas de no existir este dato pierdes la referencia....o sea deja de ser una base de datos relacional.

Henry Rivas
15 de Agosto del 2004
Tengo problemas al intentar trasladar una data de access a Sql server, me da el siguiente error SQLstate: "01000" es decir no puedo conectar al servidor o no se que es lo que pasa, mi me puede ayudar te agradezco

Anubis
15 de Agosto del 2004
Hola por metodologia tu amigo tiene toda la razón sin embargo en la practica ambas formas funcionan por cuanto el null seria equivalente a la creación del código 0