-- Table for storing contacts information
CREATE TABLE contacts (
tenant_id UUID,
contact_id UUID DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL,
first_name VARCHAR(100),
last_name VARCHAR(100),
phone_number VARCHAR(20),
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (tenant_id, contact_id),
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
);
-- Table for storing campaign information
CREATE TABLE campaigns (
tenant_id UUID,
campaign_id UUID DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
description TEXT,
start_date DATE,
status VARCHAR(50) DEFAULT 'draft',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
vector_embedding VECTOR(768), -- Adjust the dimensions as needed
PRIMARY KEY (tenant_id, campaign_id),
FOREIGN KEY (tenant_id) REFERENCES tenants(id)
);
-- Table for mapping contacts to campaigns
CREATE TABLE campaign_contacts (
tenant_id UUID,
campaign_id UUID,
contact_id UUID,
PRIMARY KEY (tenant_id, campaign_id, contact_id),
FOREIGN KEY (tenant_id, campaign_id) REFERENCES campaigns(tenant_id, campaign_id),
FOREIGN KEY (tenant_id, contact_id) REFERENCES contacts(tenant_id, contact_id)
);
-- Table for storing information about campaign emails
CREATE TABLE campaign_emails (
tenant_id UUID,
campaign_id UUID,
email_id UUID DEFAULT gen_random_uuid(),
subject VARCHAR(255),
body TEXT,
sent_date TIMESTAMP,
vector_embedding VECTOR(768), -- Adjust the dimensions as needed
PRIMARY KEY (tenant_id, campaign_id),
FOREIGN KEY (tenant_id, campaign_id) REFERENCES campaigns(tenant_id, campaign_id)
);
-- Table for storing campaign performance analytics
CREATE TABLE campaign_analytics (
tenant_id UUID,
campaign_id UUID,
analytics_id UUID DEFAULT gen_random_uuid(),
email_sent_count INT DEFAULT 0,
email_opened_count INT DEFAULT 0,
link_clicked_count INT DEFAULT 0,
conversions INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (tenant_id, campaign_id, analytics_id),
FOREIGN KEY (tenant_id, campaign_id) REFERENCES campaigns(tenant_id, campaign_id)
);