42 lines
1.3 KiB
MySQL
42 lines
1.3 KiB
MySQL
|
-- Users known by the application. "Nickname" is a misnomer. Nom de
|
||
|
-- user was too pretentious. It's how the customer wishes to be
|
||
|
↓-- addressed, but "address" would be confusing.
|
||
|
|
||
|
CREATE TABLE users (
|
||
|
id SERIAL,
|
||
|
email CITEX UNIQUE NOT NULL,
|
||
|
nickname TEXT NOT NULL
|
||
|
);
|
||
|
|
||
|
-- Users who are currently staff
|
||
|
|
||
|
CREATE TABLE staff (
|
||
|
staff_id INTEGER UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
active BOOLEAN
|
||
|
);
|
||
|
|
||
|
-- Users who are currently clients
|
||
|
|
||
|
CREATE TABLE clients (
|
||
|
client_id INTEGER UNIQUE NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||
|
active BOOLEAN
|
||
|
);
|
||
|
|
||
|
-- This is interesting, because we've basically created a M:1
|
||
|
-- relationship of staff and clients, but a 1:1 relationship of
|
||
|
-- clients to staff. That satisfies the current assignment, mostly.
|
||
|
-- An appointment can then be made my a client, and there's only one
|
||
|
-- staff person who it could apply to, so the query is straightforward
|
||
|
-- then.
|
||
|
--
|
||
|
-- To extend this into a M:M relationship, you'd have to remove the
|
||
|
-- "UNIQUE" setting from the staff_id field and use the
|
||
|
-- relationship.id field instead for appointments.
|
||
|
|
||
|
CREATE TABLE relationship (
|
||
|
id SERIAL,
|
||
|
client_id INTEGER NOT NULL REFERENCES clients(client_id) ON DELETE CASCADE,
|
||
|
staff_id INTEGER UNIQUE NOT NULL REFERENCES staff(staff_id) ON DELETE CASCADE
|
||
|
);
|
||
|
|