Foreign keys at the database level cause issues with deployment flexibility. Keep only indexes for query performance; enforce referential integrity at the application level.
45 lines
1.5 KiB
SQL
45 lines
1.5 KiB
SQL
CREATE TABLE IF NOT EXISTS project_board
|
|
(
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
project_uuid UUID NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
created_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_board_project ON project_board (project_uuid);
|
|
|
|
CREATE TABLE IF NOT EXISTS project_board_column
|
|
(
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
board_uuid UUID NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
position INTEGER NOT NULL DEFAULT 0,
|
|
wip_limit INTEGER,
|
|
color VARCHAR(20)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_board_column_board ON project_board_column (board_uuid);
|
|
|
|
CREATE TABLE IF NOT EXISTS project_board_card
|
|
(
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
column_uuid UUID NOT NULL,
|
|
issue_id BIGINT,
|
|
project UUID,
|
|
title VARCHAR(500) NOT NULL,
|
|
description TEXT,
|
|
position INTEGER NOT NULL DEFAULT 0,
|
|
assignee_id UUID,
|
|
due_date TIMESTAMPTZ,
|
|
priority VARCHAR(10),
|
|
created_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_project_board_card_column ON project_board_card (column_uuid);
|
|
CREATE INDEX IF NOT EXISTS idx_project_board_card_issue ON project_board_card (issue_id) WHERE issue_id IS NOT NULL;
|