remove all foreign key constraints from SQL migrations

Foreign keys at the database level cause issues with deployment flexibility.
Keep only indexes for query performance; enforce referential integrity at
the application level.
This commit is contained in:
ZhenYi 2026-04-15 11:03:17 +08:00
parent 2f31e7268b
commit 3a8b8c9cf8
7 changed files with 11 additions and 13 deletions

View File

@ -2,9 +2,9 @@
CREATE TABLE IF NOT EXISTS room_message_reaction CREATE TABLE IF NOT EXISTS room_message_reaction
( (
id UUID PRIMARY KEY, id UUID PRIMARY KEY,
room UUID NOT NULL REFERENCES room (id) ON DELETE CASCADE, room UUID NOT NULL,
message UUID NOT NULL REFERENCES room_message (id) ON DELETE CASCADE, message UUID NOT NULL,
"user" UUID NOT NULL REFERENCES "user" (uid) ON DELETE CASCADE, "user" UUID NOT NULL,
emoji VARCHAR(50) NOT NULL, emoji VARCHAR(50) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
UNIQUE (message, "user", emoji) UNIQUE (message, "user", emoji)

View File

@ -1,8 +1,8 @@
CREATE TABLE IF NOT EXISTS room_message_edit_history CREATE TABLE IF NOT EXISTS room_message_edit_history
( (
id UUID PRIMARY KEY, id UUID PRIMARY KEY,
message UUID NOT NULL REFERENCES room_message (id) ON DELETE CASCADE, message UUID NOT NULL,
"user" UUID NOT NULL REFERENCES "user" (uid) ON DELETE CASCADE, "user" UUID NOT NULL,
old_content TEXT NOT NULL, old_content TEXT NOT NULL,
new_content TEXT NOT NULL, new_content TEXT NOT NULL,
edited_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() edited_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()

View File

@ -14,7 +14,7 @@ CREATE INDEX IF NOT EXISTS idx_project_board_project ON project_board (project_u
CREATE TABLE IF NOT EXISTS project_board_column CREATE TABLE IF NOT EXISTS project_board_column
( (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
board_uuid UUID NOT NULL REFERENCES project_board (id) ON DELETE CASCADE, board_uuid UUID NOT NULL,
name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL,
position INTEGER NOT NULL DEFAULT 0, position INTEGER NOT NULL DEFAULT 0,
wip_limit INTEGER, wip_limit INTEGER,
@ -26,7 +26,7 @@ CREATE INDEX IF NOT EXISTS idx_project_board_column_board ON project_board_colum
CREATE TABLE IF NOT EXISTS project_board_card CREATE TABLE IF NOT EXISTS project_board_card
( (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
column_uuid UUID NOT NULL REFERENCES project_board_column (id) ON DELETE CASCADE, column_uuid UUID NOT NULL,
issue_id BIGINT, issue_id BIGINT,
project UUID, project UUID,
title VARCHAR(500) NOT NULL, title VARCHAR(500) NOT NULL,

View File

@ -1,4 +1,4 @@
ALTER TABLE project ALTER TABLE project
ADD COLUMN workspace_id UUID REFERENCES workspace(id) ON DELETE SET NULL; ADD COLUMN workspace_id UUID;
CREATE INDEX idx_project_workspace_id ON project (workspace_id) WHERE workspace_id IS NOT NULL; CREATE INDEX idx_project_workspace_id ON project (workspace_id) WHERE workspace_id IS NOT NULL;

View File

@ -1,5 +1,5 @@
CREATE TABLE IF NOT EXISTS workspace_billing ( CREATE TABLE IF NOT EXISTS workspace_billing (
workspace_id UUID PRIMARY KEY REFERENCES workspace(id) ON DELETE CASCADE, workspace_id UUID PRIMARY KEY,
balance DECIMAL(20, 4) NOT NULL DEFAULT 0, balance DECIMAL(20, 4) NOT NULL DEFAULT 0,
currency VARCHAR(10) NOT NULL DEFAULT 'USD', currency VARCHAR(10) NOT NULL DEFAULT 'USD',
monthly_quota DECIMAL(20, 4) NOT NULL DEFAULT 0, monthly_quota DECIMAL(20, 4) NOT NULL DEFAULT 0,

View File

@ -1,7 +1,7 @@
CREATE TABLE IF NOT EXISTS workspace_billing_history CREATE TABLE IF NOT EXISTS workspace_billing_history
( (
uid UUID PRIMARY KEY, uid UUID PRIMARY KEY,
workspace_id UUID NOT NULL REFERENCES workspace (id) ON DELETE CASCADE, workspace_id UUID NOT NULL,
user_id UUID, user_id UUID,
amount DECIMAL(20, 4) NOT NULL, amount DECIMAL(20, 4) NOT NULL,
currency VARCHAR(10) NOT NULL DEFAULT 'USD', currency VARCHAR(10) NOT NULL DEFAULT 'USD',

View File

@ -22,9 +22,7 @@ CREATE TABLE IF NOT EXISTS agent_task
started_at TIMESTAMPTZ, started_at TIMESTAMPTZ,
done_at TIMESTAMPTZ, done_at TIMESTAMPTZ,
-- Progress info (step count, current status text) -- Progress info (step count, current status text)
progress VARCHAR(255), progress VARCHAR(255)
-- Parent task FK
CONSTRAINT fk_agent_task_parent FOREIGN KEY (parent_id) REFERENCES agent_task(id) ON DELETE SET NULL
); );
CREATE INDEX IF NOT EXISTS idx_agent_task_project ON agent_task (project_uuid); CREATE INDEX IF NOT EXISTS idx_agent_task_project ON agent_task (project_uuid);