USE master;
CREATE DATABASE Rowerownia;
GO

USE Rowerownia;
GO

SET LANGUAGE polski;
GO

CREATE TABLE Uzytkownicy
(
  UID int PRIMARY KEY,
  login varchar(16) UNIQUE NOT NULL,
  imie varchar(32) NOT NULL,
  nazwisko varchar(64) NOT NULL,
  email varchar(64) UNIQUE NOT NULL,
  data_od datetime NOT NULL,
  ostatnia_aktywnosc datetime,
  saldo_konta money NOT NULL DEFAULT 0,
  status_konta varchar(16) NOT NULL,
  CONSTRAINT ck_dane_osobowe_litery CHECK ((nazwisko LIKE '[A-Z]%') AND (imie LIKE '[A-Z]%')),
  CONSTRAINT ck_mail CHECK (email LIKE '%@%'),
  CONSTRAINT ck_status_konta CHECK (email LIKE '%@%')
);


CREATE TABLE Rowery
(
  RID int PRIMARY KEY,
  typ INT NOT NULL,
  stan varchar(32) NOT NULL DEFAULT('sprawny'),
  CONSTRAINT ck_bike_type CHECK (typ < 4), -- zalezne od liczby typow rowerow
  CONSTRAINT ck_stan_roweru CHECK  (stan in ('sprawny','uszkodzony', 'w naprawie', 'zagubiony'))
);


CREATE TABLE Stacje
(
  SID int PRIMARY KEY,
  miejsca int NOT NULL,
  miejsca_zajete int NOT NULL,
  miejsca_wolne int NOT NULL,
  dl_geogr float,
  szer_geogr float,
  osiedle varchar(64),
  ulica varchar(64),
  stan varchar(16),
  CONSTRAINT ck_stan_stacji CHECK (stan IN ('nieczynna', 'pełna', 'pusta', 'niepełna')),
  CONSTRAINT ck_miejsca CHECK (miejsca_wolne + miejsca_zajete <= miejsca)
);

CREATE TABLE Wypozyczenia
(
  WID int PRIMARY KEY,
  uzytkownik int FOREIGN KEY REFERENCES Uzytkownicy(UID),
  rower int FOREIGN KEY REFERENCES Rowery(RID),
  stacja_wyp int FOREIGN KEY REFERENCES Stacje(SID),
  godzina_wyp datetime NOT NULL,
  stacja_zwrotu int FOREIGN KEY REFERENCES Stacje(SID),
  godzina_zwrotu datetime,
  status varchar(32),
  CONSTRAINT ck_status CHECK (status IN ('zakończone', 'aktywne'))
);

CREATE TABLE Stan_stacji
(
  stacja int FOREIGN KEY REFERENCES Stacje(SID),
  rower int FOREIGN KEY REFERENCES Rowery(RID),
  data_dodania datetime
);

CREATE TABLE Kampanie
(
  nazwa varchar(64) PRIMARY KEY,
  firma varchar(64) NOT NULL,
  rowery int, -- liczba rowerow
  od datetime,
  do datetime,
   CONSTRAINT ck_date CHECK(od < do)
);

CREATE TABLE Reklamy
(
  RID int FOREIGN KEY REFERENCES Rowery(RID),
  reklama varchar(64) FOREIGN KEY REFERENCES Kampanie(nazwa),
  od datetime,
  do datetime,
  CONSTRAINT ck_data CHECK(od < do)
);

