idempotent schema indexes

This commit is contained in:
2026-04-20 06:02:05 -06:00
parent 164f738776
commit 8c0c705dd8

View File

@@ -27,7 +27,10 @@ CREATE TABLE IF NOT EXISTS users (
tokenVersion INT NOT NULL DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_users_primary_store FOREIGN KEY (primaryStoreId) REFERENCES storeLocation(storeId) ON DELETE SET NULL
CONSTRAINT fk_users_primary_store FOREIGN KEY (primaryStoreId) REFERENCES storeLocation(storeId) ON DELETE SET NULL,
INDEX idx_users_primary_store (primaryStoreId),
INDEX idx_users_role (role),
INDEX idx_users_name (lastName, firstName)
);
CREATE TABLE IF NOT EXISTS supplier (
@@ -65,7 +68,8 @@ CREATE TABLE IF NOT EXISTS service_species (
species VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (serviceId, species),
CONSTRAINT fk_service_species_service FOREIGN KEY (serviceId) REFERENCES service(serviceId) ON DELETE CASCADE
CONSTRAINT fk_service_species_service FOREIGN KEY (serviceId) REFERENCES service(serviceId) ON DELETE CASCADE,
INDEX idx_service_species_species (species)
);
CREATE TABLE IF NOT EXISTS product (
@@ -89,7 +93,9 @@ CREATE TABLE IF NOT EXISTS inventory (
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT uq_inventory_store_product UNIQUE (storeId, prodId),
CONSTRAINT fk_inventory_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId),
CONSTRAINT fk_inventory_product FOREIGN KEY (prodId) REFERENCES product(prodId)
CONSTRAINT fk_inventory_product FOREIGN KEY (prodId) REFERENCES product(prodId),
INDEX idx_inventory_store (storeId),
INDEX idx_inventory_product (prodId)
);
CREATE TABLE IF NOT EXISTS productSupplier (
@@ -111,7 +117,8 @@ CREATE TABLE IF NOT EXISTS purchaseOrder (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_purchase_order_supplier FOREIGN KEY (supId) REFERENCES supplier(supId),
CONSTRAINT fk_purchase_order_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId)
CONSTRAINT fk_purchase_order_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId),
INDEX idx_purchase_order_store (storeId)
);
CREATE TABLE IF NOT EXISTS coupon (
@@ -143,7 +150,11 @@ CREATE TABLE IF NOT EXISTS pet (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_pet_owner_user FOREIGN KEY (ownerUserId) REFERENCES users(id) ON DELETE SET NULL,
CONSTRAINT fk_pet_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId) ON DELETE SET NULL
CONSTRAINT fk_pet_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId) ON DELETE SET NULL,
INDEX idx_pet_owner_user (ownerUserId),
INDEX idx_pet_store (storeId),
INDEX idx_pet_species (petSpecies),
INDEX idx_pet_name (petName)
);
CREATE TABLE IF NOT EXISTS appointment (
@@ -162,7 +173,12 @@ CREATE TABLE IF NOT EXISTS appointment (
CONSTRAINT fk_appointment_pet FOREIGN KEY (petId) REFERENCES pet(petId) ON DELETE SET NULL,
CONSTRAINT fk_appointment_customer FOREIGN KEY (customerId) REFERENCES users(id),
CONSTRAINT fk_appointment_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId),
CONSTRAINT fk_appointment_employee FOREIGN KEY (employeeId) REFERENCES users(id)
CONSTRAINT fk_appointment_employee FOREIGN KEY (employeeId) REFERENCES users(id),
INDEX idx_appointment_store (storeId),
INDEX idx_appointment_employee (employeeId),
INDEX idx_appointment_customer (customerId),
INDEX idx_appointment_pet (petId),
INDEX idx_appointment_date_status (appointmentDate, appointmentStatus)
);
CREATE TABLE IF NOT EXISTS adoption (
@@ -178,7 +194,9 @@ CREATE TABLE IF NOT EXISTS adoption (
CONSTRAINT fk_adoption_pet FOREIGN KEY (petId) REFERENCES pet(petId),
CONSTRAINT fk_adoption_customer FOREIGN KEY (customerId) REFERENCES users(id),
CONSTRAINT fk_adoption_employee FOREIGN KEY (employeeId) REFERENCES users(id),
CONSTRAINT fk_adoption_source_store FOREIGN KEY (sourceStoreId) REFERENCES storeLocation(storeId)
CONSTRAINT fk_adoption_source_store FOREIGN KEY (sourceStoreId) REFERENCES storeLocation(storeId),
INDEX idx_adoption_store (sourceStoreId),
INDEX idx_adoption_employee (employeeId)
);
CREATE TABLE IF NOT EXISTS cart (
@@ -200,7 +218,8 @@ CREATE TABLE IF NOT EXISTS cart (
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_cart_user FOREIGN KEY (userId) REFERENCES users(id),
CONSTRAINT fk_cart_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId) ON DELETE SET NULL,
CONSTRAINT fk_cart_coupon FOREIGN KEY (couponId) REFERENCES coupon(couponId) ON DELETE SET NULL
CONSTRAINT fk_cart_coupon FOREIGN KEY (couponId) REFERENCES coupon(couponId) ON DELETE SET NULL,
INDEX idx_cart_user (userId)
);
CREATE TABLE IF NOT EXISTS cart_item (
@@ -243,7 +262,11 @@ CREATE TABLE IF NOT EXISTS sale (
CONSTRAINT fk_sale_customer FOREIGN KEY (customerId) REFERENCES users(id) ON DELETE SET NULL,
CONSTRAINT fk_sale_original_sale FOREIGN KEY (originalSaleId) REFERENCES sale(saleId),
CONSTRAINT fk_sale_cart FOREIGN KEY (cartId) REFERENCES cart(cartId) ON DELETE SET NULL,
CONSTRAINT fk_sale_coupon FOREIGN KEY (couponId) REFERENCES coupon(couponId) ON DELETE SET NULL
CONSTRAINT fk_sale_coupon FOREIGN KEY (couponId) REFERENCES coupon(couponId) ON DELETE SET NULL,
INDEX idx_sale_store (storeId),
INDEX idx_sale_employee (employeeId),
INDEX idx_sale_customer (customerId),
INDEX idx_sale_date (saleDate)
);
CREATE TABLE IF NOT EXISTS saleItem (
@@ -291,12 +314,11 @@ CREATE TABLE IF NOT EXISTS passwordResetToken (
usedAt DATETIME NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uq_password_reset_token_hash UNIQUE (tokenHash),
CONSTRAINT fk_password_reset_token_user FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE
CONSTRAINT fk_password_reset_token_user FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_password_reset_token_user (userId),
INDEX idx_password_reset_token_expires (expiresAt)
);
CREATE INDEX idx_password_reset_token_user ON passwordResetToken(userId);
CREATE INDEX idx_password_reset_token_expires ON passwordResetToken(expiresAt);
CREATE TABLE IF NOT EXISTS conversation (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
customerId BIGINT NOT NULL,
@@ -307,7 +329,9 @@ CREATE TABLE IF NOT EXISTS conversation (
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_conversation_customer FOREIGN KEY (customerId) REFERENCES users(id),
CONSTRAINT fk_conversation_staff FOREIGN KEY (staffId) REFERENCES users(id) ON DELETE SET NULL
CONSTRAINT fk_conversation_staff FOREIGN KEY (staffId) REFERENCES users(id) ON DELETE SET NULL,
INDEX idx_conversation_customer (customerId),
INDEX idx_conversation_staff (staffId)
);
CREATE TABLE IF NOT EXISTS message (
@@ -336,33 +360,8 @@ CREATE TABLE IF NOT EXISTS activityLog (
activity TEXT NOT NULL,
logTimestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_activity_log_user FOREIGN KEY (userId) REFERENCES users(id),
CONSTRAINT fk_activity_log_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId) ON DELETE SET NULL
CONSTRAINT fk_activity_log_store FOREIGN KEY (storeId) REFERENCES storeLocation(storeId) ON DELETE SET NULL,
INDEX idx_activity_log_store (storeId),
INDEX idx_activity_log_timestamp_id (logTimestamp, logId)
);
CREATE INDEX idx_users_primary_store ON users(primaryStoreId);
CREATE INDEX idx_users_role ON users(role);
CREATE INDEX idx_users_name ON users(lastName, firstName);
CREATE INDEX idx_service_species_species ON service_species(species);
CREATE INDEX idx_inventory_store ON inventory(storeId);
CREATE INDEX idx_inventory_product ON inventory(prodId);
CREATE INDEX idx_purchase_order_store ON purchaseOrder(storeId);
CREATE INDEX idx_pet_owner_user ON pet(ownerUserId);
CREATE INDEX idx_pet_store ON pet(storeId);
CREATE INDEX idx_pet_species ON pet(petSpecies);
CREATE INDEX idx_pet_name ON pet(petName);
CREATE INDEX idx_appointment_store ON appointment(storeId);
CREATE INDEX idx_appointment_employee ON appointment(employeeId);
CREATE INDEX idx_appointment_customer ON appointment(customerId);
CREATE INDEX idx_appointment_pet ON appointment(petId);
CREATE INDEX idx_appointment_date_status ON appointment(appointmentDate, appointmentStatus);
CREATE INDEX idx_adoption_store ON adoption(sourceStoreId);
CREATE INDEX idx_adoption_employee ON adoption(employeeId);
CREATE INDEX idx_sale_store ON sale(storeId);
CREATE INDEX idx_sale_employee ON sale(employeeId);
CREATE INDEX idx_sale_customer ON sale(customerId);
CREATE INDEX idx_sale_date ON sale(saleDate);
CREATE INDEX idx_cart_user ON cart(userId);
CREATE INDEX idx_conversation_customer ON conversation(customerId);
CREATE INDEX idx_conversation_staff ON conversation(staffId);
CREATE INDEX idx_activity_log_store ON activityLog(storeId);
CREATE INDEX idx_activity_log_timestamp_id ON activityLog(logTimestamp, logId);