mirror of
https://git.meshkee.com/Meshkee/backend.git
synced 2026-08-11 22:30:59 +04:30
NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.
39 lines
1.6 KiB
SQL
39 lines
1.6 KiB
SQL
-- Meshkee CMS — addresses owned by exactly one user or business
|
|
|
|
CREATE TABLE addresses (
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
user_id BIGINT,
|
|
business_id BIGINT,
|
|
province VARCHAR(100) NOT NULL,
|
|
city VARCHAR(100) NOT NULL,
|
|
address TEXT NOT NULL,
|
|
postal_code VARCHAR(20) NOT NULL,
|
|
landline VARCHAR(30),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
CONSTRAINT addresses_user_id_fkey
|
|
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
|
|
CONSTRAINT addresses_business_id_fkey
|
|
FOREIGN KEY (business_id) REFERENCES businesses (id) ON DELETE CASCADE,
|
|
CONSTRAINT addresses_exactly_one_owner CHECK (
|
|
(user_id IS NOT NULL AND business_id IS NULL)
|
|
OR (user_id IS NULL AND business_id IS NOT NULL)
|
|
),
|
|
CONSTRAINT addresses_province_nonempty CHECK (char_length(trim(province)) > 0),
|
|
CONSTRAINT addresses_city_nonempty CHECK (char_length(trim(city)) > 0),
|
|
CONSTRAINT addresses_address_nonempty CHECK (char_length(trim(address)) > 0),
|
|
CONSTRAINT addresses_postal_code_nonempty CHECK (char_length(trim(postal_code)) > 0),
|
|
CONSTRAINT addresses_landline_nonempty_optional CHECK (
|
|
landline IS NULL OR char_length(trim(landline)) > 0
|
|
)
|
|
);
|
|
|
|
CREATE INDEX idx_addresses_user_id ON addresses (user_id) WHERE user_id IS NOT NULL;
|
|
CREATE INDEX idx_addresses_business_id ON addresses (business_id) WHERE business_id IS NOT NULL;
|
|
|
|
CREATE TRIGGER addresses_set_updated_at
|
|
BEFORE UPDATE ON addresses
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION set_updated_at();
|