Pgadmin

3個表之間的外鍵問題。(PgAdminIII)

  • May 17, 2017

我正在為 PostgreSQL 使用 pgAdmin III,但 3 個表之間的外鍵存在問題。我的桌子是:

帶有主鍵 IDnegozio 整數類型,無需設為串列類型) 的區域設置 Orario帶有主鍵 IDorario(整數類型,無需設為串列類型) OrarioToLocale具有兩列:IDlocaleTIDorarioT(均為整數)。

我正在嘗試在 IDlocale -> IDlocaleT 和 IDorario -> IDorarioT 之間創建一個外鍵,所以我可以建立一個 Shop 可以有多個時間的關係。問題是,當我嘗試創建這些外鍵時,我發生了一個錯誤:“沒有為引用表提供唯一約束匹配的鍵”,我不明白為什麼。我試圖Google但我沒有找到任何答案!我能怎麼做?

這是三個表的程式碼:

CREATE TABLE public."Locale"
(
 "IDnegozio" integer NOT NULL DEFAULT nextval('"Locale_IDnegozio_seq"'::regclass),
 CONSTRAINT "Locale_pkey" PRIMARY KEY ("IDnegozio"),
)

CREATE TABLE public."Orario"
(
 "IDorario" integer NOT NULL DEFAULT nextval('"Orario_IDorario_seq"'::regclass),
 CONSTRAINT "Orario_pkey" PRIMARY KEY ("IDorario")
)

CREATE TABLE public."OrarioToLocale"
(
 "IDlocaleT" integer NOT NULL,
 "IDorarioT" integer NOT NULL
)

我能怎麼做?謝謝指教!

您可以將其直接放入CREATE TABLE語句中,這可能比您擁有的更容易和更短。

CREATE TABLE public.Locale ( IDnegozio serial PRIMARY KEY );
CREATE TABLE public.Orario ( IDorario serial PRIMARY KEY );
CREATE TABLE public.OrarioToLocale (
 IDlocaleT integer NOT NULL REFERENCES Locale,
 IDorarioT integer NOT NULL REFERENCES Orario,
 PRIMARY KEY ( IDlocaleT, IDorarioT )
)

我用複合初級製作了 OrarioToLocale,但是,

  1. 你可以決定你不想要那個。
  2. 如果您確實想要這樣,那麼 IDlocaleT 和 IDorarioT 就NOT NULL意味著即使這樣也不需要明確。

引用自:https://dba.stackexchange.com/questions/173777