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.
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


0