CREATE TABLE IF NOT EXISTS vets ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE INDEX IF NOT EXISTS idx_vets_last_name ON vets (last_name); CREATE TABLE IF NOT EXISTS specialties ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name TEXT ); CREATE INDEX IF NOT EXISTS idx_specialties_name ON specialties (name); CREATE TABLE IF NOT EXISTS vet_specialties ( vet_id INT NOT NULL REFERENCES vets (id), specialty_id INT NOT NULL REFERENCES specialties (id), UNIQUE (vet_id, specialty_id) ); CREATE TABLE IF NOT EXISTS types ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name TEXT ); CREATE INDEX IF NOT EXISTS idx_types_name ON types (name); CREATE TABLE IF NOT EXISTS owners ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, first_name TEXT, last_name TEXT, address TEXT, city TEXT, telephone TEXT ); CREATE INDEX IF NOT EXISTS idx_owners_last_name ON owners (last_name); CREATE TABLE IF NOT EXISTS pets ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name TEXT, birth_date DATE, type_id INT NOT NULL REFERENCES types (id), owner_id INT REFERENCES owners (id) ); CREATE INDEX IF NOT EXISTS idx_pets_name ON pets (name); CREATE INDEX IF NOT EXISTS idx_pets_owner_id ON pets (owner_id); CREATE UNIQUE INDEX IF NOT EXISTS unique_owner_pet_name ON pets (owner_id, LOWER(name)); CREATE TABLE IF NOT EXISTS visits ( id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, pet_id INT REFERENCES pets (id), visit_date DATE, description TEXT ); CREATE INDEX IF NOT EXISTS idx_visits_pet_id ON visits (pet_id);