entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Problema tablas con relacion 1 a 1 para Access

Hola.

Tengo una base de datos con 4 tablas para representar el funcionamiento de un concesionario de coches de segunda mano. Como los coches no se repiten por matricula, solo habrá un coche por matricula, así se disponen de las siguientes tablas:

Proveedores, Coches, Clientes y Ventas.

La tabla "Proveedores" se relaciona con la tabla "Coches" por un campo "DNIP" que aparece en ambas tablas y solo es clave primaria en "Proveedores" (relación de 1 a muchos).

La tabla "Clientes" se relaciona con la tabla "Ventas" por un campo "DNIC" que también aparece en ambas tablas y solo es clave primaria en "Clientes" (relación 1 a muchos).

Las tabla de Coches hace la función de "stock", pero solo hay un coche por matricula (por eso su clave primaria es "matricula" sin duplicados). La tabla Ventas tiene también clave primaria "matricula", porque a cada venta le corresponde un solo coche con una "matricula" concreta que coincidirá con una "matricula" en la tabla de "Coches".
La relación creo que debe ser a la fuerza de 1-1, pero como puede haber coches guardados en la tabla "Coches" y no haber ninguna venta de esos mismos, no se como hacer para que tengan cierta integridad referencial de tal modo que cuando se ingrese una Venta, la matricula que se introduzca deba estar también en la tabla Coches (pero no al contrario: se podrá meter un coche con una matricula sin tener necesariamente que existir esa matricula en la tabla Ventas).

Como solucionar el problema de la relación 1-1 de las tablas "Coches" y "Ventas" de modo que no haya problemas luego al meter los datos???

Gracias por adelantado.

1 Respuesta

0voto

kaiba78987 Puntos2300

Hola.

No sé cómo funciona Access en este aspecto porque no lo he tocado mucho (nada en realidad), pero me imagino que funcionará como una base de datos cualquiera.

Debes definir como clave primaria en ventas la matrícula, además de como clave ajena. Esto te permite identificar las ventas por matrícula y, además, si intentas introducir una venta con una matrícula inexistente, el motor de la base de datos no debería permitirlo.

Dicho esto, te comento un detalle que quizás no has tenido en cuenta. Al ser un concesionario de segunda mano, es posible que vuelvas a tener el mismo coche porque el cliente decida revendértelo a los dos años o algo así. Por eso, me parece que la tabla de ventas debería tener alguna forma de distinguir entre diferentes ventas para el mismo vehículo. Puedes hacerlo de dos formas: le asignas un campo ID artificial a las ventas (al estilo de código numérico incremental) y lo conviertes en clave primaria, pasando de las matrículas en este caso; la segunda opción es que introduzcas un campo adicional en la tabla que permita formar una clave primaria compuesta junto con la matrícula. Así, podrías tener filas tales como:

Matrícula: 1234-BCD Venta: 1
Matrícula: 1234-BCD Venta: 2
etc...

Es un caso que te puede ocurrir y creo que estaría bien que lo controlaras de alguna forma.

Espero haberte ayudado :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta