Examples
The examples in this section with following database schema(see SampleSchema.java):
CREATE TABLE ap_car (
cr_id BIGINT PRIMARY KEY AUTO_INCREMENT,
cr_license_plate VARCHAR(20) NOT NULL UNIQUE,
cr_brand VARCHAR(50) NOT NULL,
cr_model VARCHAR(50) NOT NULL,
cr_year SMALLINT NOT NULL,
cr_seats TINYINT NOT NULL DEFAULT 4,
cr_daily_rate DECIMAL(4,2),
cr_color VARCHAR(30),
cr_full_name VARCHAR(128) GENERATED ALWAYS AS CONCAT(cr_brand, '-', cr_model, '-', cr_year),
cr_status ENUM('available', 'rented', 'maintenance') DEFAULT 'available',
cr_dimensions INTEGER ARRAY[4],
cr_created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
NOT NULL,
cr_updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
NOT NULL
);
CREATE INDEX ix_ap_car__cr_model ON ap_car(cr_model);
CREATE INDEX ix_ap_car__cr_color ON ap_car(cr_color);
CREATE TABLe ap_car_feature (
cf_cr_id BIGINT NOT NULL
CONSTRAINT fk_ap_car_feature__ap_car REFERENCES ap_car(cr_id)
ON DELETE CASCADE
ON UPDATE RESTRICT,
cf_feature_name VARCHAR(32) NOT NULL,
CONSTRAINT pk_ap_car_feature PRIMARY KEY(cf_cr_id, cf_feature_name),
CONSTRAINT unq_ap_car_feature__cf_cr_id_cf_feature_name
UNIQUE(cf_cr_id, cf_feature_name)
);
CREATE TABLE ap_member (
mb_id BIGINT PRIMARY KEY AUTO_INCREMENT,
mb_first_name VARCHAR(50) NOT NULL,
mb_last_name VARCHAR(50) NOT NULL,
mb_email VARCHAR(100) NOT NULL,
mb_license_number VARCHAR(50) NOT NULL UNIQUE,
mb_phone VARCHAR(20),
mb_address TEXT,
mb_status ENUM('active', 'suspended', 'inactive') DEFAULT 'active',
mb_created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
NOT NULL,
mb_updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
NOT NULL
);
CREATE INDEX ix_ap_member__mb_first_name_mb_last_name ON ap_member(mb_first_name, mb_last_name);
CREATE TABLE ap_rent (
rt_id UUID DEFAULT RANDOM_UUID() PRIMARY KEY,
rt_cr_id BIGINT NOT NULL
CONSTRAINT fk_ap_rent__ap_car REFERENCES ap_car(cr_id)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
rt_mb_id BIGINT NOT NULL
CONSTRAINT fk_ap_rent__ap_member REFERENCES ap_member(mb_id)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
rt_start_date TIMESTAMP WITH TIME ZONE NOT NULL,
rt_end_date TIMESTAMP WITH TIME ZONE,
rt_total_amount DECIMAL(10,2),
rt_status ENUM('active', 'completed', 'cancelled') DEFAULT 'active',
rt_created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
NOT NULL,
rt_updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
NOT NULL,
CONSTRAINT unq_ap_rent__rt_cr_id_rt_mb_id_rt_start_date
UNIQUE(rt_mb_id, rt_cr_id, rt_start_date)
);
CREATE INDEX ix_ap_rent__rt_mb_id ON ap_rent(rt_mb_id);
CREATE TABLE ap_car_archived (
ca_id BIGINT PRIMARY KEY AUTO_INCREMENT,
ca_license_plate VARCHAR(20) NOT NULL UNIQUE,
ca_brand VARCHAR(50) NOT NULL,
ca_model VARCHAR(50) NOT NULL,
ca_year SMALLINT NOT NULL,
ca_seats TINYINT NOT NULL DEFAULT 4,
ca_color VARCHAR(30),
ca_created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
NOT NULL
);