SQL - Ayuda al añadir un constreñimiento tipo check

 
Vista:

Ayuda al añadir un constreñimiento tipo check

Publicado por Rodelero (5 intervenciones) el 05/01/2014 22:22:55
Hola, tengo una pequeña duda:
tenemos una tabla "usuario" que en el modelo entidad relación tenía un atributo denominado "nacionalidad", al pasar a modelo relacional este atributo pasa a ser una lista controlada (una lista de países), la relación entre ambas tablas no puede ser 1:N porque un usuario podrá tener una o dos nacionalidades (doble nacionalidad), por lo tanto la clave foránea del país no puede pasar a la tabla, ya que podría, como digo, tener dos nacionalidades. La relación por tanto será N:M, generándose una nueva tabla con las FK de "usuario" y "nacionalidad".

Ahora surge el problema de que como la PK de esta nueva tabla es la combinación de las dos FK (fk_usuario,fk_pais), un mismo usuario podría tener múltiples nacionalidades (1,2,3,4,...,100), lo cual no es cierto, como máximo podrá tener sólo dos.

Mi duda es cómo sería el constreñimiento que se debe añadir al crear la base de datos para que se verifique que una fk_usuario no aparece más de dos veces. He probado con esto por si sonaba la flauta pero:

alter table pais_has_candidato add constraint ck_nacionalidad check (count(candidato_usuario)<3);

pero no se pueden usar funciones de agregación en una restricción tipo check
"ERROR: no se pueden usar funciones de agregación en una restricción check"

Habría alguna forma de solucionarlo? o la única solución sería usando un disparador?

Un saludo y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda al añadir un constreñimiento tipo check

Publicado por Leopoldo Taylhardat (93 intervenciones) el 06/01/2014 17:12:42
Saludos...
La relación por tanto debe ser 1:2

Si la BD que estas usando es una base de datos de alto nivel (no sé con cual estás trabajando), no permitirá más de dos(2) valores en la tabla dependiente.

Espero que te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda al añadir un constreñimiento tipo check

Publicado por Rodelero (5 intervenciones) el 07/01/2014 15:32:43
Lo siento, no entiendo el concepto de "bbdd de alto nivel", esta bbdd es para una práctica de clase :/

Si, la cardinalidad será:

USUARIO (1,2)
|
|
|
[es de] N:M
|
|
|
PAIS (0,n)

A los efectos, la relación entre ambas tablas tengo entendido que es N:M, no? La relación genera tabla.

De cualquier forma, como el software que uso (para crear el diagrama relacional, y a continuación exportar el sql que crea las tablas) no me permite poner una cardinalidad (1,2) en USUARIO tengo que poner (1,n) si o si, lo que pasa es que, como decía, ahora un usuario podría tener múltiples nacionalidades, no hay forma de restringirlo como máximo a 2?

La duda era para adelantar trabajo en navidades, si no lo dejaré pendiente hasta que pueda hablar con el profesor para no liarnos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar