貸借、勘定要素のテーブルに続いて、資産、負債、資本、費用、収益の組合せで生じるパターン中、ありえない組合せを行とするテーブルを作成します。
元々はあり得るパターン、よく見かける8つの要素の組み合わせか、または過去十数年の仕訳データに出現するパターンを持たせることを考えましたが、逆に、組み合わせにおいてありえないとされる3パターンと、その逆仕訳パターンを持たせることにしました。それで十分目的を果たしそうだからです。
このテーブルは、利用中の会計ソフトから汎用データとして受け入れる仕訳のデータの検証、長期的には仕訳の入力を直接自作アプリ側で行う時の仕訳データの検証ですが、検証して警告を発するのが目的で、制約や排除用バリデーションとしての利用は想定していません。実務では、あり得ない仕訳であっても起票することはあるし、貸借一致が確認されていれば、現に市販ソフトでもその仕訳は通っています。
CREATE TABLE kaikei."type_取引要素検証" (
id integer NOT NULL,
"借方" text,
"貸方" text
);
ALTER TABLE kaikei."type_取引要素検証" OWNER TO postgres;
COMMENT ON TABLE kaikei."type_取引要素検証" IS 'ある得ないパターンの方';
CREATE SEQUENCE kaikei."type_取引要素_id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE kaikei."type_取引要素_id_seq" OWNER TO postgres;
ALTER SEQUENCE kaikei."type_取引要素_id_seq" OWNED BY kaikei."type_取引要素検証".id;
ALTER TABLE ONLY kaikei."type_取引要素検証" ALTER COLUMN id SET DEFAULT nextval('kaikei."type_取引要素_id_seq"'::regclass);
INSERT INTO kaikei."type_取引要素検証" VALUES (41, '2', '4');
INSERT INTO kaikei."type_取引要素検証" VALUES (42, '2', '5');
INSERT INTO kaikei."type_取引要素検証" VALUES (43, '4', '5');
INSERT INTO kaikei."type_取引要素検証" VALUES (44, '4', '2');
INSERT INTO kaikei."type_取引要素検証" VALUES (45, '5', '2');
INSERT INTO kaikei."type_取引要素検証" VALUES (46, '5', '4');
SELECT pg_catalog.setval('kaikei."type_取引要素_id_seq"', 46, true);
ALTER TABLE ONLY kaikei."type_取引要素検証"
ADD CONSTRAINT "type_取引要素_pkey" PRIMARY KEY (id);
ALTER TABLE ONLY kaikei."type_取引要素検証"
ADD CONSTRAINT "f_type_取引要素検証借方" FOREIGN KEY ("借方") REFERENCES kaikei."type_勘定要素"("要素コード") ON UPDATE CASCADE DEFERRABLE;
ALTER TABLE ONLY kaikei."type_取引要素検証"
ADD CONSTRAINT "f_type_取引要素検証貸方" FOREIGN KEY ("貸方") REFERENCES kaikei."type_勘定要素"("要素コード") ON UPDATE CASCADE DEFERRABLE;
これで、会計の主役である、勘定科目、仕訳の前に検討しておくことは終わったと思います。