views.reagent/examples/class-registry/create_db.sql

54 lines
2.8 KiB
SQL

-- For PostgreSQL
-- run with psql. e.g. 'psql < create_db.sql'
CREATE ROLE class_registry LOGIN PASSWORD 's3cr3t';
CREATE DATABASE class_registry OWNER class_registry;
-- assumes you're piping this script into psql ...
\c class_registry;
CREATE TABLE classes
(
class_id SERIAL PRIMARY KEY NOT NULL,
code TEXT NOT NULL,
name TEXT NOT NULL
);
ALTER TABLE classes OWNER TO class_registry;
CREATE TABLE people
(
people_id SERIAL PRIMARY KEY NOT NULL,
type TEXT NOT NULL,
first_name TEXT NOT NULL,
middle_name TEXT,
last_name TEXT NOT NULL,
email TEXT NOT NULL
);
ALTER TABLE people OWNER TO class_registry;
CREATE TABLE registry
(
registry_id SERIAL PRIMARY KEY NOT NULL,
class_id INTEGER REFERENCES classes (class_id) ON DELETE CASCADE NOT NULL,
people_id INTEGER REFERENCES people (people_id) ON DELETE CASCADE NOT NULL
);
ALTER TABLE registry OWNER TO class_registry;
INSERT INTO people (type, first_name, middle_name, last_name, email) VALUES ('student', 'Ben', NULL, 'Bitdiddle', 'benb@mit.edu');
INSERT INTO people (type, first_name, middle_name, last_name, email) VALUES ('student', 'Alyssa', 'P', 'Hacker', 'aphacker@mit.edu');
INSERT INTO people (type, first_name, middle_name, last_name, email) VALUES ('student', 'Eva', 'Lu', 'Ator', 'eval@mit.edu');
INSERT INTO people (type, first_name, middle_name, last_name, email) VALUES ('student', 'Louis', NULL, 'Reasoner', 'prolog@mit.edu');
INSERT INTO people (type, first_name, middle_name, last_name, email) VALUES ('professor', 'Gerald', 'Jay', 'Sussman', 'metacirc@mit.edu');
INSERT INTO people (type, first_name, middle_name, last_name, email) VALUES ('professor', 'Hal', NULL, 'Abelson', 'evalapply@mit.edu');
INSERT INTO classes (code, name) VALUES ('6001', 'The Structure and Interpretation of Computer Programs');
INSERT INTO classes (code, name) VALUES ('6946', 'The Structure and Interpretation of Classical Mechanics');
INSERT INTO classes (code, name) VALUES ('1806', 'Linear Algebra');
INSERT INTO registry (class_id, people_id) VALUES ((SELECT class_id FROM classes WHERE code = '6001'),
(SELECT people_id FROM people WHERE first_name = 'Gerald' AND middle_name = 'Jay' AND last_name = 'Sussman'));
INSERT INTO registry (class_id, people_id) VALUES ((SELECT class_id FROM classes WHERE code = '6946'),
(SELECT people_id FROM people WHERE first_name = 'Gerald' AND middle_name = 'Jay' AND last_name = 'Sussman'));
INSERT INTO registry (class_id, people_id) VALUES ((SELECT class_id FROM classes WHERE code = '6001'),
(SELECT people_id FROM people WHERE first_name = 'Hal' AND last_name = 'Abelson'));