26 lines
1.1 KiB
SQL
26 lines
1.1 KiB
SQL
CREATE TABLE IF NOT EXISTS locations_cross_fields (
|
|
id SERIAL PRIMARY KEY,
|
|
location_id INTEGER NOT NULL REFERENCES locations_locations(id) ON DELETE CASCADE,
|
|
name VARCHAR(100) NOT NULL,
|
|
port_count INTEGER NOT NULL CHECK (port_count BETWEEN 1 AND 999),
|
|
notes TEXT,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
deleted_at TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_cross_fields_location_name_active
|
|
ON locations_cross_fields(location_id, lower(name)) WHERE deleted_at IS NULL;
|
|
|
|
CREATE TABLE IF NOT EXISTS locations_cross_field_ports (
|
|
id SERIAL PRIMARY KEY,
|
|
cross_field_id INTEGER NOT NULL REFERENCES locations_cross_fields(id) ON DELETE CASCADE,
|
|
port_number INTEGER NOT NULL CHECK (port_number > 0),
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
UNIQUE(cross_field_id, port_number)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_cross_field_ports_field ON locations_cross_field_ports(cross_field_id);
|