27 lines
1.0 KiB
MySQL
27 lines
1.0 KiB
MySQL
|
|
CREATE TABLE customers (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
organization_id UUID NOT NULL,
|
||
|
|
name VARCHAR(255) NOT NULL,
|
||
|
|
email VARCHAR(255) UNIQUE,
|
||
|
|
phone VARCHAR(20),
|
||
|
|
address VARCHAR(500),
|
||
|
|
is_default BOOLEAN DEFAULT FALSE,
|
||
|
|
is_active BOOLEAN DEFAULT TRUE,
|
||
|
|
metadata JSONB DEFAULT '{}',
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||
|
|
|
||
|
|
CONSTRAINT fk_customers_organization
|
||
|
|
FOREIGN KEY (organization_id)
|
||
|
|
REFERENCES organizations(id)
|
||
|
|
ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Create indexes
|
||
|
|
CREATE INDEX idx_customers_organization_id ON customers(organization_id);
|
||
|
|
CREATE INDEX idx_customers_email ON customers(email);
|
||
|
|
CREATE INDEX idx_customers_is_default ON customers(is_default);
|
||
|
|
CREATE INDEX idx_customers_is_active ON customers(is_active);
|
||
|
|
|
||
|
|
-- Create unique constraint to ensure only one default customer per organization
|
||
|
|
CREATE UNIQUE INDEX idx_customers_org_default ON customers(organization_id, is_default) WHERE is_default = TRUE;
|