Thread: problem with uniques and foreing keys
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/>
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, ^^^^^^^
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.
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...
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
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.