mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-05-16 17:09:39 +00:00

This is reverting a workaround for a Hibernate "feature". There's no need for the child entities (Pet and Visit) to know about their parent (foreign key). Hibernate can manage that just fine with a @JoinColumn. But it needs a nullable foreign key column in the DB schema. That's the downside. The upside is much less code in Java.
52 lines
1.4 KiB
SQL
52 lines
1.4 KiB
SQL
CREATE TABLE IF NOT EXISTS vets (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
first_name TEXT,
|
|
last_name TEXT
|
|
);
|
|
CREATE INDEX ON vets (last_name);
|
|
|
|
CREATE TABLE IF NOT EXISTS specialties (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name TEXT
|
|
);
|
|
CREATE INDEX 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 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 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 ON pets (name);
|
|
CREATE INDEX ON pets (owner_id);
|
|
|
|
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 ON visits (pet_id);
|