私はPostgreSQLを初めて使用します。私は次のようなテーブルを持っています:
CREATE TABLE Person (
ID SERIAL PRIMARY KEY,
Name VARCHAR(32) NOT NULL DEFAULT '',
Surname VARCHAR(32) NOT NULL DEFAULT '',
Birthday DATE,
Gender VARCHAR(8)
);
-- Student table inherits from person
CREATE TABLE Student (
ID_Student SERIAL PRIMARY KEY,
MajorDept VARCHAR(32),
) INHERITS(Person);
-- Student table inherits from person
CREATE TABLE Employee (
ID_Employee SERIAL PRIMARY KEY,
Position VARCHAR(32),
Rank VARCHAR(32),
Salary NUMERIC(12,2)
) INHERITS(Person);
-- Address table references person
CREATE TABLE Address (
ID_Address SERIAL PRIMARY KEY,
Person_id INTEGER REFERENCES Person(ID) NOT NULL,
Email VARCHAR(32) UNIQUE,
Country VARCHAR(32),
CityCode INTEGER,
City VARCHAR(32),
AddressLine VARCHAR(60),
);
これらのテーブルによると、テーブルにデータを挿入したい場合Adress
、Postgresはそのエラーを出します:
エラー:テーブル"address"の挿入または更新が外部キー制約"address_person_id_fkey"に違反しています詳細:キー(person_id)=(1)がテーブル"person"に存在しません。
私はPostgresでそれを学びました
インデックス(一意の制約を含む)と外部キーの制約は、単一のテーブルにのみ適用され、継承の子には適用されません。
私の質問は、トリガーを使用してこれをどのように修正できますか?サンプルコードは非常に便利です。
子テーブルにいくつかの行を挿入した後、「SELECT*FROMPerson;」でデータを確認できます。同じように。次のようになります。
人物テーブル
1;"Bill";"Smith";"1985-05-10";"male"
2;"Jenny";"Brown";"1986-08-12";"female"
3;"Bob";"Morgan";"1986-06-11";"male"
4;"Katniss";"Everdeen";"1970-08-12";"female"
5;"Peter";"Everdeen";"1968-08-12";"male"
学生テーブル
1;"Bill";"Smith";"1985-05-10";"male";1;"chemistry"
2;"Jenny";"Brown";"1986-08-12";"female";2;"physics"
3;"Bob";"Morgan";"1986-06-11";"male";3;"physics"
従業員テーブル
4;"Katniss";"Everdeen";"1970-08-12";"female";1;"Prof";"1";3500.00
5;"Peter";"Everdeen";"1968-08-12";"male";2;"Assist-Prof";"5";1800.00