[SQL] Updated for proper usage

Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
Jim Martens 2017-04-14 15:42:03 +02:00
parent 1fc1b0518b
commit db98e8d596
1 changed files with 77 additions and 64 deletions

View File

@ -1,81 +1,94 @@
CREATE TABLE EstateAgent (
ID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NOCYCLE),
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
login VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NULL
CREATE TABLE VSISP12.EstateAgent
(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
name VARCHAR(255) DEFAULT '' NOT NULL,
address VARCHAR(255) DEFAULT '' NOT NULL,
login VARCHAR(255) DEFAULT '' NOT NULL,
password VARCHAR(255)
);
CREATE UNIQUE INDEX EstateAgent_login_uindex ON VSISP12.EstateAgent (login);
CREATE TABLE VSISP12.Estate
(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
city VARCHAR(255) DEFAULT 'Musterstadt' NOT NULL,
postalCode VARCHAR(5) DEFAULT '00000' NOT NULL,
street VARCHAR(255) DEFAULT 'Musterstraße' NOT NULL,
streetNumber SMALLINT DEFAULT 0 NOT NULL,
squareArea INT DEFAULT 0 NOT NULL,
agent INT NOT NULL,
CONSTRAINT Estate_ESTATEAGENT_ID_fk FOREIGN KEY (agent) REFERENCES ESTATEAGENT (ID)
);
CREATE TABLE Estate (
ID int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NOCYCLE),
city VARCHAR(255) NOT NULL,
postalCode VARCHAR(5) NOT NULL,
street VARCHAR(255) NOT NULL,
streetNumber int NOT NULL,
squareArea int NOT NULL,
agent VARCHAR(255),
FOREIGN KEY (agent) REFERENCES EstateAgent(ID)
CREATE TABLE VSISP12.Apartment
(
ID INT PRIMARY KEY NOT NULL,
floor SMALLINT DEFAULT 0 NOT NULL,
rent INT DEFAULT 0 NOT NULL,
rooms SMALLINT DEFAULT 1 NOT NULL,
balcony SMALLINT DEFAULT 0 NOT NULL,
builtInKitchen SMALLINT DEFAULT 1 NOT NULL,
CONSTRAINT Apartment_ESTATE_ID_fk FOREIGN KEY (ID) REFERENCES ESTATE (ID)
);
CREATE TABLE Apartment (
ID int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NOCYCLE),
floor int NOT NULL,
rent int NOT NULL,
rooms int NOT NULL,
balcony SMALLINT NOT NULL,
builtInKitchen SMALLINT NOT NULL ,
FOREIGN KEY (ID) REFERENCES Estate(ID)
CREATE TABLE VSISP12.House
(
ID INT PRIMARY KEY NOT NULL,
price INT DEFAULT 0 NOT NULL,
garden SMALLINT DEFAULT 0 NOT NULL,
CONSTRAINT House_ESTATE_ID_fk FOREIGN KEY (ID) REFERENCES ESTATE (ID)
);
CREATE TABLE House (
ID int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NOCYCLE),
price int NOT NULL,
garden SMALLINT NOT NULL,
FOREIGN KEY (ID) REFERENCES Estate(ID)
CREATE TABLE VSISP12.Contract
(
contractNumber INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
date DATE,
place VARCHAR(255) DEFAULT 'Musterstadt' NOT NULL
);
CREATE TABLE Contract (
contractNumber int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NOCYCLE),
date DATE NOT NULL,
place VARCHAR(255) NOT NULL
CREATE TABLE VSISP12.PurchaseContract
(
contractNumber INT PRIMARY KEY NOT NULL,
numberOfInstallments SMALLINT DEFAULT 0 NOT NULL,
interestRate SMALLINT DEFAULT 0 NOT NULL,
CONSTRAINT PurchaseContract_CONTRACT_CONTRACTNUMBER_fk FOREIGN KEY (contractNumber) REFERENCES CONTRACT (CONTRACTNUMBER)
);
CREATE TABLE PurchaseContract (
contractNumber int NOT NULL PRIMARY KEY,
numberOfInstallments int NOT NULL,
interestRate int NOT NULL,
FOREIGN KEY (contractNumber) REFERENCES Contract(contractNumber)
CREATE TABLE VSISP12.TenancyContract
(
contractNumber INT PRIMARY KEY NOT NULL,
startDate TIMESTAMP,
duration TIMESTAMP,
additionalCosts INT DEFAULT 0 NOT NULL,
CONSTRAINT TenancyContract_CONTRACT_CONTRACTNUMBER_fk FOREIGN KEY (contractNumber) REFERENCES CONTRACT (CONTRACTNUMBER)
);
CREATE TABLE TenancyContract (
contractNumber int NOT NULL PRIMARY KEY,
startDate DATE NOT NULL,
duration int NOT NULL,
additionalCosts int NOT NULL,
FOREIGN KEY (contractNumber) REFERENCES Contract(contractNumber)
CREATE TABLE VSISP12.Person
(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
firstName VARCHAR(255) DEFAULT 'Max' NOT NULL,
name VARCHAR(255) DEFAULT 'Mustermann' NOT NULL,
address VARCHAR(255) DEFAULT 'Musterstraße' NOT NULL
);
CREATE TABLE Person (
ID int NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NOCYCLE),
firstName VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
CREATE TABLE VSISP12.Sales
(
contractNumber INT PRIMARY KEY NOT NULL,
person INT NOT NULL,
house INT NOT NULL,
CONSTRAINT Sales_PURCHASECONTRACT_CONTRACTNUMBER_fk FOREIGN KEY (contractNumber) REFERENCES PURCHASECONTRACT (CONTRACTNUMBER),
CONSTRAINT Sales_PERSON_ID_fk FOREIGN KEY (person) REFERENCES PERSON (ID),
CONSTRAINT Sales_HOUSE_ID_fk FOREIGN KEY (house) REFERENCES HOUSE (ID)
);
CREATE UNIQUE INDEX Sales_house_uindex ON VSISP12.Sales (house);
CREATE TABLE Sales (
contractNumber int NOT NULL PRIMARY KEY,
personID int NOT NULL,
house int UNIQUE NOT NULL,
FOREIGN KEY (contractNumber) REFERENCES PurchaseContract(contractNumber),
FOREIGN KEY (personID) REFERENCES Person(ID),
FOREIGN KEY (house) REFERENCES House(ID)
CREATE TABLE VSISP12.Rentals
(
contractNumber INT PRIMARY KEY NOT NULL,
person INT NOT NULL,
apartment INT NOT NULL,
CONSTRAINT Rentals_TENANCYCONTRACT_CONTRACTNUMBER_fk FOREIGN KEY (contractNumber) REFERENCES TENANCYCONTRACT (CONTRACTNUMBER),
CONSTRAINT Rentals_PERSON_ID_fk FOREIGN KEY (person) REFERENCES PERSON (ID),
CONSTRAINT Rentals_APARTMENT_ID_fk FOREIGN KEY (apartment) REFERENCES APARTMENT (ID)
);
CREATE TABLE Rentals (
contractNumber int NOT NULL PRIMARY KEY,
personID int NOT NULL,
apartment int UNIQUE NOT NULL,
FOREIGN KEY (contractNumber) REFERENCES TenancyContract(contractNumber),
FOREIGN KEY (personID) REFERENCES Person(ID),
FOREIGN KEY (apartment) REFERENCES Apartment(ID)
);
CREATE UNIQUE INDEX Rentals_apartment_uindex ON VSISP12.Rentals (apartment);