is-relation によって E/R に接続された 2 つのテーブルがあります。「マザーテーブル」を代表する一枚
CREATE TABLE PERSONS(
id SERIAL NOT NULL,
name character varying NOT NULL,
address character varying NOT NULL,
day_of_creation timestamp NOT NULL DEFAULT current_timestamp,
PRIMARY KEY (id)
)
「子テーブル」を表すもう一方
CREATE TABLE EMPLOYEES (
id integer NOT NULL,
store character varying NOT NULL,
paychecksize integer NOT NULL,
FOREIGN KEY (id)
REFERENCES PERSONS(id),
PRIMARY KEY (id)
)
これらの 2 つのテーブルが 1 つのビューに結合されるようになりました
CREATE VIEW EMPLOYEES_VIEW AS
SELECT
P.id,name,address,store,paychecksize,day_of_creation
FROM
PERSONS AS P
JOIN
EMPLOYEES AS E ON P.id = E.id
db ユーザーがそのビューに挿入できるようにするルールまたはトリガーを作成し、分割された列の厄介な詳細を別のテーブルに保存したいと考えています。
day_of_creation
しかし、IDはSERIALであり、ユーザーがそれらを提供する必要がないデフォルト値があるため、便利にしたいので、次のようなステートメント
INSERT INTO EMPLOYEES_VIEW (name, address, store, paychecksize)
VALUES ("bob", "top secret", "drugstore", 42)
結果として十分なはずです
人
id|name|address |day_of_creation
-------------------------------
1 |bob |top secret| 2013-08-13 15:32:42
従業員
id| store |paychecksize
---------------------
1 |drugstore|42
基本的なルールは次のように簡単です
CREATE RULE EMPLOYEE_VIEW_INSERT AS ON INSERT TO EMPLOYEE_VIEW
DO INSTED (
INSERT INTO PERSONS
VALUES (NEW.id,NEW.name,NEW.address,NEW.day_of_creation),
INSERT INTO EMPLOYEES
VALUES (NEW.id,NEW.store,NEW.paychecksize)
)
十分なはずです。しかし、実際には必要ないにもかかわらず、ユーザーが ID とタイムスタンプを提供する必要があるため、これは便利ではありません。
利便性の基準に一致するように、そのコード ベースを書き直して拡張するにはどうすればよいですか?