CRM Schema Recipe
Description
This recipe provides the necessary database schema for a comprehensive Customer Relationship Management (CRM) system.
Prerequisites
- Database setup using SynapCores storage
- Basic understanding of SQL and database concepts
Steps
Step 1: Create Customers Table
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(20),
address VARCHAR(200),
city VARCHAR(50),
state VARCHAR(50),
zip_code VARCHAR(10),
country VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Step 2: Create Orders Table
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
total DECIMAL(10, 2) NOT NULL,
status VARCHAR(20) NOT NULL CHECK (status IN ('pending', 'shipped', 'delivered')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Step 3: Create Order Items Table
CREATE TABLE order_items (
order_item_id INT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
unit_price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
Step 4: Create Emails Table
CREATE TABLE emails (
email_id INT PRIMARY KEY,
customer_id INT NOT NULL,
subject VARCHAR(100) NOT NULL,
body TEXT NOT NULL,
sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
opened_at TIMESTAMP,
clicked_at TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Step 5: Create Calendars Table
CREATE TABLE calendars (
calendar_id INT PRIMARY KEY,
customer_id INT NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
event_name VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Step 6: Create Notes Table
CREATE TABLE notes (
note_id INT PRIMARY KEY,
customer_id INT NOT NULL,
note_date DATE NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Step 7: Create Tasks Table
CREATE TABLE tasks (
task_id INT PRIMARY KEY,
customer_id INT NOT NULL,
task_date DATE NOT NULL,
description TEXT NOT NULL,
due_date DATE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Verification
-- Verify the schema by checking for correct data types and relationships
SELECT * FROM information_schema.columns WHERE table_name IN ('customers', 'orders', 'order_items', 'emails', 'calendars', 'notes', 'tasks');
SELECT * FROM information_schema.foreign_keys WHERE constraint_schema = 'public';
Notes
- This schema assumes a one-to-many relationship between customers and orders, as well as other tables.
- The use of timestamps for created and updated dates is recommended for data tracking and auditing purposes.
- Consider adding additional columns or tables to accommodate specific business requirements.