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