CREATE TABLE study_unit (
-- Opiskelusuunnitelmaan liittyvät valinnat
-- (tästä haetun tiedon järjestelyn pohjana käytetään suunnitelman pohjatietoa)
--
 deleted boolean,
 unitid integer,         
 planid integer,
 begintime TIMESTAMP,       -- suorituksen suunniteltu aloitusaika
 endtime TIMESTAMP,         -- suorituksen suunniteltu lopetusaika
 studygroupid integer,      -- suorituksen kohde (ryhmittely tai null)
 courseinstanceid integer,  -- suorituksen kohde, 'valeilmoittautuminen'
                            -- (kurssi-instanssi tai null)
 PRIMARY KEY (unitid),
 FOREIGN KEY (planid) REFERENCES study_plan (planid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (studygroupid) REFERENCES study_group (studygroupid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (courseinstanceid) REFERENCES courseinstance (courseinstanceid)
  ON UPDATE cascade
  ON DELETE restrict
);



CREATE TABLE study_unit_comment (
-- Suunnitelmiin liittyvät perustelut ja kommentit
--
 deleted boolean,
 unitcommentid integer,         
 unitcommenttypeid integer,         
 unitid integer,
 personid integer,           -- kenen lisäämä
 value varchar,
 modifiedon TIMESTAMP,       -- milloin, aikajärjestykseen
 PRIMARY KEY (unitcommentid),
 FOREIGN KEY (unitid) REFERENCES study_unit (unitid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (unitcommenttypeid) REFERENCES study_unit_comment_type (unitcommenttypeid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (personid) REFERENCES person (personid)
  ON UPDATE cascade
  ON DELETE restrict
);

CREATE TABLE study_unit_acceptance_level (
-- Suunnitelman hyväksymistaso
--
 deleted boolean,
 unitacceptancelevelid integer NOT NULL,         
 value varchar NOT NULL,
 PRIMARY KEY (unitacceptancelevelid)
);


CREATE TABLE study_unit_acceptance (
-- Suunnitelman hyväksyminen
--
 deleted boolean,
 unitacceptanceid integer NOT NULL,         
 acceptedby integer NOT NULL,            --hyväksyjän personid
 acceptedon TIMESTAMP NOT NULL,          --hyväksymisaika
 unitcommentid integer,
 unitid integer NOT NULL,
 unitacceptancelevelid integer NOT NULL, --esim. rakenne vai aika hyväksytty
 statusid integer,
 PRIMARY KEY (unitacceptanceid),
 FOREIGN KEY (acceptedby) REFERENCES person (personid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (unitcommentid) REFERENCES study_unit_comment (unitcommentid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (unitid) REFERENCES study_unit (unitid)
  ON UPDATE cascade
  ON DELETE restrict,
 FOREIGN KEY (unitacceptancelevelid) REFERENCES study_unit_acceptance_level (unitacceptancelevelid)
  ON UPDATE cascade
  ON DELETE restrict
);
