baza-danych-rowerownia/create_db.sql
Krzysztof Wołowiec 9c4d5311e9 'details'
2019-06-15 00:24:38 +02:00

92 lines
2.4 KiB
Transact-SQL

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]%') AND (login LIKE '[A-Z]%')),
CONSTRAINT ck_mail CHECK (email LIKE '%@%'),
CONSTRAINT ck_status_konta CHECK (status_konta IN ('zawieszone', 'aktywe', 'nieaktywne')
);
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)
);