diff --git a/backend/futures_trade_record/sql/04_create_variety_table.sql b/backend/futures_trade_record/sql/04_create_variety_table.sql index e6696c4..074e13f 100644 --- a/backend/futures_trade_record/sql/04_create_variety_table.sql +++ b/backend/futures_trade_record/sql/04_create_variety_table.sql @@ -3,6 +3,7 @@ DO $$ BEGIN + -- 创建主表 variety IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety') THEN CREATE TABLE variety ( id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL, @@ -20,6 +21,7 @@ BEGIN RAISE NOTICE 'variety table already exists'; END IF; + -- 创建子表 variety_name 并添加外键 IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_name') THEN CREATE TABLE variety_name ( id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL, @@ -27,18 +29,25 @@ BEGIN name VARCHAR(50) NOT NULL, deleted BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + -- 外键约束,关联variety主表 + CONSTRAINT fk_variety_name_variety + FOREIGN KEY (variety_id) + REFERENCES variety(id) + ON DELETE CASCADE -- 主表记录删除时,子表关联记录也删除 + ON UPDATE CASCADE -- 主表id更新时,子表关联id同步更新 ); CREATE TRIGGER update_variety_name_updated_at BEFORE UPDATE ON "variety_name" FOR EACH ROW EXECUTE FUNCTION update_data_modified_column(); - RAISE NOTICE 'created variety_name table and trigger'; + RAISE NOTICE 'created variety_name table, trigger and foreign key'; ELSE RAISE NOTICE 'variety_name table already exists'; END IF; + -- 创建子表 variety_code 并添加外键 IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_code') THEN CREATE TABLE variety_code ( id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL, @@ -46,18 +55,25 @@ BEGIN code VARCHAR(50) NOT NULL, deleted BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + -- 外键约束,关联variety主表 + CONSTRAINT fk_variety_code_variety + FOREIGN KEY (variety_id) + REFERENCES variety(id) + ON DELETE CASCADE + ON UPDATE CASCADE ); CREATE TRIGGER update_variety_code_updated_at BEFORE UPDATE ON "variety_code" FOR EACH ROW EXECUTE FUNCTION update_data_modified_column(); - RAISE NOTICE 'created variety_code table and trigger'; + RAISE NOTICE 'created variety_code table, trigger and foreign key'; ELSE RAISE NOTICE 'variety_code table already exists'; END IF; + -- 创建子表 variety_tick 并添加外键 IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_tick') THEN CREATE TABLE variety_tick ( id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL, @@ -65,18 +81,25 @@ BEGIN tick NUMERIC(12, 6), deleted BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + -- 外键约束,关联variety主表 + CONSTRAINT fk_variety_tick_variety + FOREIGN KEY (variety_id) + REFERENCES variety(id) + ON DELETE CASCADE + ON UPDATE CASCADE ); CREATE TRIGGER update_variety_tick_updated_at BEFORE UPDATE ON "variety_tick" FOR EACH ROW EXECUTE FUNCTION update_data_modified_column(); - RAISE NOTICE 'created variety_tick table and trigger'; + RAISE NOTICE 'created variety_tick table, trigger and foreign key'; ELSE RAISE NOTICE 'variety_tick table already exists'; END IF; + -- 创建子表 variety_tick_price 并添加外键 IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_tick_price') THEN CREATE TABLE variety_tick_price ( id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL, @@ -84,14 +107,20 @@ BEGIN price NUMERIC(12, 6), deleted BOOLEAN NOT NULL DEFAULT FALSE, created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP + updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, + -- 外键约束,关联variety主表 + CONSTRAINT fk_variety_tick_price_variety + FOREIGN KEY (variety_id) + REFERENCES variety(id) + ON DELETE CASCADE + ON UPDATE CASCADE ); CREATE TRIGGER update_variety_tick_price_updated_at BEFORE UPDATE ON "variety_tick_price" FOR EACH ROW EXECUTE FUNCTION update_data_modified_column(); - RAISE NOTICE 'created variety_tick_price table and trigger'; + RAISE NOTICE 'created variety_tick_price table, trigger and foreign key'; ELSE RAISE NOTICE 'variety_tick_price table already exists'; END IF;