50 lines
1.9 KiB
SQL
50 lines
1.9 KiB
SQL
-- 素材主表
|
|
CREATE TABLE materials (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
oss_key VARCHAR(255) NOT NULL,
|
|
original_name VARCHAR(255) NOT NULL,
|
|
file_size BIGINT NOT NULL,
|
|
mime_type VARCHAR(100) NOT NULL,
|
|
width INT,
|
|
height INT,
|
|
hash VARCHAR(64) NOT NULL,
|
|
created_by BIGINT NOT NULL,
|
|
star_id BIGINT NOT NULL DEFAULT 0,
|
|
created_at BIGINT NOT NULL,
|
|
updated_at BIGINT NOT NULL,
|
|
deleted_at BIGINT
|
|
);
|
|
|
|
CREATE UNIQUE INDEX uk_materials_oss_key ON materials(oss_key);
|
|
CREATE INDEX idx_materials_hash ON materials(hash);
|
|
CREATE INDEX idx_materials_created_by ON materials(created_by);
|
|
CREATE INDEX idx_materials_star_id ON materials(star_id);
|
|
|
|
-- 资产-素材关联表
|
|
CREATE TABLE asset_material_relations (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
asset_id BIGINT NOT NULL REFERENCES assets(id) ON DELETE CASCADE,
|
|
material_id BIGINT NOT NULL REFERENCES materials(id) ON DELETE RESTRICT,
|
|
material_type VARCHAR(50) NOT NULL,
|
|
layer_order INT NOT NULL DEFAULT 0,
|
|
pos_x DOUBLE PRECISION,
|
|
pos_y DOUBLE PRECISION,
|
|
opacity DOUBLE PRECISION DEFAULT 1.0,
|
|
rotation DOUBLE PRECISION DEFAULT 0,
|
|
scale_x DOUBLE PRECISION DEFAULT 1.0,
|
|
scale_y DOUBLE PRECISION DEFAULT 1.0,
|
|
version INT NOT NULL DEFAULT 1,
|
|
created_at BIGINT NOT NULL,
|
|
updated_at BIGINT NOT NULL,
|
|
deleted_at BIGINT
|
|
);
|
|
|
|
-- 索引
|
|
CREATE INDEX idx_amr_asset_id ON asset_material_relations(asset_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX idx_amr_material_id ON asset_material_relations(material_id) WHERE deleted_at IS NULL;
|
|
CREATE INDEX idx_amr_asset_type_layer ON asset_material_relations(asset_id, material_type, layer_order) WHERE deleted_at IS NULL;
|
|
|
|
-- 部分唯一索引(软删除感知)
|
|
CREATE UNIQUE INDEX uk_amr_asset_type_active ON asset_material_relations(asset_id, material_type) WHERE deleted_at IS NULL;
|
|
CREATE UNIQUE INDEX uk_amr_asset_layer_active ON asset_material_relations(asset_id, layer_order) WHERE deleted_at IS NULL;
|