"REFERENCES" and UNIQUE - Mailing list pgsql-general

From Michelle Konzack
Subject "REFERENCES" and UNIQUE
Date
Msg-id 20060104185243.GO2860@freenet.de
Whole thread Raw
Responses Re: "REFERENCES" and UNIQUE
Re: "REFERENCES" and UNIQUE
List pgsql-general
Hello,

I get the following error:

  __( 'stdin' )_________________________________________________________
 /
| psql:omegasector.sql:125: ERROR:  there is no unique constraint matchi
| ng given keys for referenced table "cities"
 \______________________________________________________________________

and after puzzeling arround what happen, I know it.

  __( '/home/michelle.konzack/.pgsql/omegasector.sql' )_________________
 /
<snip>
| CREATE TABLE countries (
|     serno       int             NOT NULL UNIQUE,
|     isocode     varchar(2)      NOT NULL UNIQUE,
|     EN          text            NOT NULL,
|     DE          text            NOT NULL,
|     FR          text            NOT NULL
|     );

<snip>

| CREATE TABLE cities (
|     serno       int             NOT NULL UNIQUE,
|     country     varchar(2)      NOT NULL REFERENCES countries (isocode),
|     EN          varchar(30)     NOT NULL,
|     DE          varchar(30)     NOT NULL,
|     FR          varchar(30)     NOT NULL
|     );

<snip>

| CREATE TABLE members (
|     serno       int             NOT NULL,
|     version     int             NOT NULL,
|     dt          timestamp       NOT NULL,
|     editor      int             NOT NULL,
|     editor_dt   timestamp       NOT NULL,
|     subject     varchar(40)     NOT NULL,
|     sdesc       varchar(300)    NOT NULL,
|     description text            NULL,
|     photos      text            NOT NULL,
|     timeline    text            NULL,
|     dossiers    text            NULL,
|     firstname   varchar(30)     NOT NULL,
|     middlenames varchar(60)     NULL,
|     lastname    varchar(30)     NOT NULL,
|     fullname    varchar(120)    NOT NULL,
|     address1    varchar(30)     NOT NULL,
|     address2    varchar(30)     NULL,
|     street      varchar(30)     NOT NULL,
|     streetno    varchar(6)      NULL,
|     city        varchar(30)     NOT NULL REFERENCES cities (EN),
|     zip         varchar(6)      NULL,
|     country     varchar(2)      NOT NULL REFERENCES countries (isocode),
|     telephon    varchar(24)     NULL,
|     fax         varchar(24)     NULL,
|     email       varchar(60)     NOT NULL,
|     url         varchar(100)    NULL
|     );
<snip>
 \______________________________________________________________________

OK, it does not work, because "cities.EN" is not UNIQUE.  And yes, it
can not be UNIQUE, because sometimes a cityname exist several times.

Is there a solution for this problem?

Data for "members" should only accepted if there is a minimum of one
match in "cities.EN" and it must not be UNIQUE.

Thanks and happy new year
Michelle

--
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
Michelle Konzack   Apt. 917                  ICQ #328449886
                   50, rue de Soultz         MSM LinuxMichi
0033/3/88452356    67100 Strasbourg/France   IRC #Debian (irc.icq.com)

pgsql-general by date:

Previous
From: John DeSoi
Date:
Subject: Re: inserting many rows
Next
From: Robert Osowiecki
Date:
Subject: Re: Unique transaction ID