Thread: problem with uniques and foreing keys

problem with uniques and foreing keys

From
"kernel.alert kernel.alert"
Date:
Hi list...<br /><br />Please i have a problem with this...<br /><br />I create the follow tables...<br /><br
/>--------------------------------------------------------<br/><br />CREATE TABLE empresa (<br />  id_empresa        
integer NOT NULL primary key, <br />  nombre             varchar(45),<br />);<br />CREATE TABLE casino (<br /> 
id_casino         integer  NOT NULL,<br />  id_empresa         integer      REFERENCES empresa(id_empresa),<br /><br
/> nombre             varchar(45), <br /><br />  primary key(id_casino,id_empresa)<br />);<br />CREATE TABLE maq_casino
(<br/>  id_empresa      integer  NOT NULL REFERENCES  casino(id_empresa),<br />  id_casino       integer  NOT NULL
REFERENCES casino(id_casino),<br /><br />  ubicacion_sala     varchar(45) default NULL,<br />  primary
key(id_empresa,id_casino,id_tipo_maquina,id_maq_casino)<br/>);<br /><br
/>--------------------------------------------------------<br/><br />When i'm gonna to create the last table i got this
error:<br /><br />ERROR:  no hay restriccion unique que coincida con las columnas dadas en la tabla referida
<<casino>><br/><br />That in english is like .. there is no a unique constraint with columns referred  in
casinotable. <br /><br /><br />Please where is the problem...<br /><br />Greetings ...<br /><br />Krackem<br /><br
/><br/> 

Re: problem with uniques and foreing keys

From
Terry Lee Tucker
Date:
On Saturday 06 May 2006 01:27 pm, "kernel.alert kernel.alert" 
<kernel.alert@gmail.com> thus communicated:
--> Hi list...
-->
--> Please i have a problem with this...
-->
--> I create the follow tables...
-->
--> --------------------------------------------------------
-->
--> CREATE TABLE empresa (
-->   id_empresa         integer  NOT NULL primary key,
-->   nombre             varchar(45),
--> );
--> CREATE TABLE casino (
-->   id_casino          integer  NOT NULL,
-->   id_empresa         integer      REFERENCES empresa(id_empresa),
-->
-->   nombre             varchar(45),
-->
-->   primary key(id_casino,id_empresa)
--> );
--> CREATE TABLE maq_casino (
-->   id_empresa      integer  NOT NULL REFERENCES  casino(id_empresa),
-->   id_casino       integer  NOT NULL REFERENCES  casino(id_casino),
-->
-->   ubicacion_sala     varchar(45) default NULL,
-->   primary key(id_empresa,id_casino,id_tipo_maquina,id_maq_casino)
--> );
-->
--> --------------------------------------------------------
-->
--> When i'm gonna to create the last table i got this error:
-->
--> ERROR:  no hay restriccion unique que coincida con las columnas dadas enla --> tabla referida <<casino>>
-->
--> That in english is like .. there is no a unique constraint with columns
--> referred  in casino table.
-->
-->
--> Please where is the problem...
-->
--> Greetings ...
-->
-->
-->

-- 
The columns referenced in the maq_casino table must have UNIQUE constraints
on them in their table definition as in:
id_casino          integer  UNIQUE NOT NULL,                                         ^^^^^^^


Re: problem with uniques and foreing keys

From
Bruno Wolff III
Date:
On Sat, May 06, 2006 at 12:27:41 -0500, "kernel.alert kernel.alert" <kernel.alert@gmail.com> wrote:
> Hi list...
> 
> Please i have a problem with this...
> 
> I create the follow tables...
> 
> --------------------------------------------------------
> 
> CREATE TABLE empresa (
>  id_empresa         integer  NOT NULL primary key,
>  nombre             varchar(45),
> );
> CREATE TABLE casino (
>  id_casino          integer  NOT NULL,
>  id_empresa         integer      REFERENCES empresa(id_empresa),
> 
>  nombre             varchar(45),
> 
>  primary key(id_casino,id_empresa)
> );
> CREATE TABLE maq_casino (
>  id_empresa      integer  NOT NULL REFERENCES  casino(id_empresa),
>  id_casino       integer  NOT NULL REFERENCES  casino(id_casino),
> 
>  ubicacion_sala     varchar(45) default NULL,
>  primary key(id_empresa,id_casino,id_tipo_maquina,id_maq_casino)
> );
> 
> --------------------------------------------------------
> 
> When i'm gonna to create the last table i got this error:
> 
> ERROR:  no hay restriccion unique que coincida con las columnas dadas en la
> tabla referida <<casino>>
> 
> That in english is like .. there is no a unique constraint with columns
> referred  in casino table.
> 
> 
> Please where is the problem...

Unless there is a performance problem, id_empresa should not appear in the
maq_casino table at all, since it is derivable from id_casino.

Is id_empresa really allowed to be NULL in casino?

If there is an actual performance problem and you really need to have it in
the mag_casino table, then you want to add another unique key (id_casino,
id_empresa) in casino and then change casino_mag to have a foreign key
reference on (id_casino, id_impresa) to casino instead of the individual
references you have now.

If id_empresa in casino_mag is not supposed to be tied to the value of
id_casino (which I doubt is the case), then it should be referencing
empresa instead of casino.


Re: problem with uniques and foreing keys

From
"kernel.alert kernel.alert"
Date:
Sorry i had a mistake in the post it was with the definition of the primary key in the empresa table...

I'm having the same error when i build the last table...


thanks for your answers...
 

Hi list...

Please i have a problem with this...

I create the follow tables...

--------------------------------------------------------

CREATE TABLE empresa (
  id_empresa         integer  NOT NULL primary key,
  nombre             varchar(45),

      primary key(id_empresa)

);
CREATE TABLE casino (
  id_casino          integer  NOT NULL,
  id_empresa         integer      REFERENCES empresa(id_empresa),

  nombre             varchar(45),

  primary key(id_casino,id_empresa)
);
CREATE TABLE maq_casino (
  id_empresa      integer  NOT NULL REFERENCES  casino(id_empresa),
  id_casino       integer  NOT NULL REFERENCES  casino(id_casino),

  ubicacion_sala     varchar(45) default NULL,
  primary key(id_empresa,id_casino,id_tipo_maquina,id_maq_casino)
);

--------------------------------------------------------

When i'm gonna to create the last table i got this error:

 

ERROR:  no hay restriccion unique que coincida con las columnas dadas en la tabla referida <<casino>>

That in english is like .. there is no a unique constraint with columns referred  in casino table.


Please where is the problem...

Greetings ...

Krackem



Re: problem with uniques and foreing keys

From
Stephan Szabo
Date:
On Sat, 6 May 2006, kernel.alert kernel.alert wrote:

> I create the follow tables...
>
> --------------------------------------------------------
>
> CREATE TABLE empresa (
>   id_empresa         integer  NOT NULL primary key,
>   nombre             varchar(45),
> );
> CREATE TABLE casino (
>   id_casino          integer  NOT NULL,
>   id_empresa         integer      REFERENCES empresa(id_empresa),
>
>   nombre             varchar(45),
>
>   primary key(id_casino,id_empresa)
> );
> CREATE TABLE maq_casino (
>   id_empresa      integer  NOT NULL REFERENCES  casino(id_empresa),
>   id_casino       integer  NOT NULL REFERENCES  casino(id_casino),

You probably want a table level constraint like:

foreign key (id_casino, id_empresa) references casino(id_casino,
id_empresa)

That's not the same as two single-column constraints which is what you
have above.