
{{{#!sql
-- Create USER table
CREATE TABLE USER (
    user_id SERIAL PRIMARY KEY,
    user_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(100) NOT NULL
);

-- Create TRANSACTION_ACCOUNT table
CREATE TABLE TRANSACTION_ACCOUNT (
    transaction_account_id SERIAL PRIMARY KEY,
    account_name VARCHAR(50),
    balance DECIMAL(10, 2),
    user_id INT REFERENCES USER(user_id)
);

-- Create TRANSACTION table
CREATE TABLE TRANSACTION (
    transaction_id SERIAL PRIMARY KEY,
    transaction_name VARCHAR(100),
    amount DECIMAL(10, 2) NOT NULL,
    net_amount DECIMAL(10, 2),
    day_id INT REFERENCES DAY(day_id),
    tag_id INT REFERENCES TAG(tag_id)
);

-- Create TRANSACTION_BREAKDOWN table
CREATE TABLE TRANSACTION_BREAKDOWN (
    transaction_breakdown_id SERIAL PRIMARY KEY,
    transaction_id INT REFERENCES TRANSACTION(transaction_id),
    transaction_account_id INT REFERENCES TRANSACTION_ACCOUNT(transaction_account_id),
    spent_amount DECIMAL(10, 2),
    earned_amount DECIMAL(10, 2)
);

-- Create YEAR table
CREATE TABLE YEAR (
    year_id SERIAL PRIMARY KEY,
    year_name INT NOT NULL
);

-- Create MONTH table
CREATE TABLE MONTH (
    month_id SERIAL PRIMARY KEY,
    year_id INT REFERENCES YEAR(year_id),
    month_name VARCHAR(20) NOT NULL
);

-- Create DAY table
CREATE TABLE DAY (
    day_id SERIAL PRIMARY KEY,
    month_id INT REFERENCES MONTH(month_id),
    day_number INT,
    day_name VARCHAR(20)
);

-- Create TAG table
CREATE TABLE TAG (
    tag_id SERIAL PRIMARY KEY,
    tag_name VARCHAR(50) NOT NULL
);

-- Delete tables if they exist
DROP TABLE IF EXISTS TRANSACTION_BREAKDOWN CASCADE;
DROP TABLE IF EXISTS TRANSACTION CASCADE;
DROP TABLE IF EXISTS TRANSACTION_ACCOUNT CASCADE;
DROP TABLE IF EXISTS DAY CASCADE;
DROP TABLE IF EXISTS MONTH CASCADE;
DROP TABLE IF EXISTS YEAR CASCADE;
DROP TABLE IF EXISTS TAG CASCADE;
DROP TABLE IF EXISTS USER CASCADE;
}}}
