30 lines
1.5 KiB
MySQL
30 lines
1.5 KiB
MySQL
|
|
-- Tables table
|
||
|
|
CREATE TABLE tables (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
organization_id UUID NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
|
||
|
|
outlet_id UUID NOT NULL REFERENCES outlets(id) ON DELETE CASCADE,
|
||
|
|
table_name VARCHAR(100) NOT NULL,
|
||
|
|
start_time TIMESTAMP WITH TIME ZONE,
|
||
|
|
status VARCHAR(50) DEFAULT 'available' CHECK (status IN ('available', 'occupied', 'reserved', 'cleaning', 'maintenance')),
|
||
|
|
order_id UUID REFERENCES orders(id) ON DELETE SET NULL,
|
||
|
|
payment_amount DECIMAL(10,2) DEFAULT 0.00 CHECK (payment_amount >= 0),
|
||
|
|
position_x DECIMAL(10,2) DEFAULT 0.00,
|
||
|
|
position_y DECIMAL(10,2) DEFAULT 0.00,
|
||
|
|
capacity INTEGER DEFAULT 4 CHECK (capacity >= 1 AND capacity <= 20),
|
||
|
|
is_active BOOLEAN DEFAULT true,
|
||
|
|
metadata JSONB DEFAULT '{}',
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX idx_tables_organization_id ON tables(organization_id);
|
||
|
|
CREATE INDEX idx_tables_outlet_id ON tables(outlet_id);
|
||
|
|
CREATE INDEX idx_tables_order_id ON tables(order_id);
|
||
|
|
CREATE INDEX idx_tables_status ON tables(status);
|
||
|
|
CREATE INDEX idx_tables_is_active ON tables(is_active);
|
||
|
|
CREATE INDEX idx_tables_table_name ON tables(table_name);
|
||
|
|
CREATE INDEX idx_tables_created_at ON tables(created_at);
|
||
|
|
|
||
|
|
-- Unique constraint for table name within an outlet
|
||
|
|
CREATE UNIQUE INDEX idx_tables_outlet_table_name ON tables(outlet_id, table_name) WHERE is_active = true;
|