Saya yang baru di postgreSQL. Saya punya 3 tabel, satu tabel referensi kunci utama 2 tabel lainnya. Tapi saya tidak bisa memasukkan data ke dalam Table3
. Lihat kode di bawah ini:
DROP TABLE Table1 CASCADE;
CREATE TABLE Table1(
"DataID" bigint NOT NULL DEFAULT '0',
"AdData" integer DEFAULT NULL,
PRIMARY KEY ("DataID")
);
DROP TABLE IF EXISTS Table2 CASCADE;
CREATE TABLE Table2 (
"Address" numeric(20) NOT NULL DEFAULT '0',
"Value" numeric(20) DEFAULT NULL,
PRIMARY KEY ("Address")
);
DROP TABLE IF EXISTS Table3 CASCADE;
CREATE TABLE table3 (
"ID" bigint NOT NULL DEFAULT '0',
"DataID" bigint DEFAULT NULL,
"Address" numeric(20) DEFAULT NULL,
"Data" bigint DEFAULT NULL,
PRIMARY KEY ("ID"),
FOREIGN KEY ("DataID") REFERENCES Table1("DataID") on delete cascade on update cascade,
FOREIGN KEY ("Address") REFERENCES Table2("Address") on delete cascade on update cascade
);
GALAT: menyisipkan atau memperbarui pada tabel "Table3" melanggar batasan kunci asing "Table3_DataID_fkey" DETAIL: Key (DataID) = (27856) tidak ada dalam tabel "Table1".
Ketika saya mencoba memasukkan data ke dalam 3 tabel, terjadi kesalahan. Saya merujuk dokumentasi postgreSQL dan mengubah kode saya sebagai berikut: (Sayangnya itu menunjukkan kesalahan lain)
DROP TABLE Table1 CASCADE;
CREATE TABLE Table1(
"DataID" bigint NOT NULL DEFAULT '0',
"AdData" integer DEFAULT NULL,
PRIMARY KEY ("DataID")
);
DROP TABLE IF EXISTS Table2 CASCADE;
CREATE TABLE Table2 (
"Address" numeric(20) NOT NULL DEFAULT '0',
"Value" numeric(20) DEFAULT NULL,
PRIMARY KEY ("Address")
);
DROP TABLE IF EXISTS Table3 CASCADE;
CREATE TABLE table3 (
"ID" bigint NOT NULL DEFAULT '0',
"DataID" bigint DEFAULT NULL REFERENCES Table1 ON DELETE RESTRICT,
"Address" numeric(20) DEFAULT NULL REFERENCES Table2 ON DELETE CASCADE,
"Data" bigint DEFAULT NULL,
PRIMARY KEY ("ID"),
PRIMARY KEY("DataID", "Address")
);
GALAT: beberapa kunci utama untuk tabel "Table3" tidak diperbolehkan LINE 65: KUNCI UTAMA ("DataID", "Address")
Tolong bantu saya ... Bagaimana saya bisa membuat referensi?
Saya mengubah ID
as UNIQUE
dan menghapus garis PRIMARY KEY ("ID")
. Pada saat itu ia menunjukkan kesalahan lain seperti:
GALAT: nilai kunci duplikat melanggar batasan unik "Table3_pkey"
sumber
Itu semua tergantung pada apa yang ingin Anda lakukan dengan data.
Contoh pertama - Anda ingin memiliki data yang konsisten di semua tabel, tetapi Anda mencoba memasukkan nilai yang tidak cocok dengan Table1.
Contoh kedua - Anda tidak ingin memiliki data yang konsisten, tetapi coba lakukan sesuatu yang lain, tidak tahu persis apa. Tabel tidak boleh memiliki lebih dari satu kunci utama.
Contoh ketiga - Anda masih tidak tahu apa yang ingin Anda capai dan menempatkan batasan UNIK pada kolom yang mungkin memiliki nilai yang sama beberapa kali.
Jika Anda hanya ingin memasukkan data Anda - singkirkan referensi kunci asing pada contoh pertama. Jika Anda ingin memiliki data yang konsisten di semua tabel - lakukan pembersihan data lalu masukkan dalam tabel DENGAN batasan kunci asing.
tl; dr: untuk menyisipkan data Anda ke dalam Table3 dengan kode dari contoh pertama - masukkan nilai yang hilang ke dalam kolom Table1.DataID yang ada di Table3.DataId.
sumber