
-- --------------------------------------------------
-- Entity Designer DDL Script for SQL Server 2005, 2008, 2012 and Azure
-- --------------------------------------------------
-- Date Created: 06/09/2018 13:24:19
-- Generated from Cadaroski Ismail
-----------------------------------------------------
-- CHANGE LOG:
-- 180618 Ivan, Add Create DB
-- 180621 Ismail, change Tables
-- 180629 Ivan, Add inserts for fixed lists
-- --------------------------------------------------

-- Auskommentieren für Löschung der Datenbank
IF db_id('EHEC_DB') is not null
  BEGIN;
	PRINT 'EHEC_DB already EXISTS, Set Multiuser to Singleuser so all open connections are cut...';
	USE [master];
	-- Set DB toSingle User so open connections do not block Destroy of DB
	ALTER DATABASE EHEC_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
	PRINT 'DB will be deleted for a new creation.'
	DROP DATABASE EHEC_DB;
  END;
ELSE
  BEGIN;
	PRINT 'EHEC_DB does NOT EXISTS,  the db will be created now...';
  END;
GO

-- Datenbank erstellen:
IF db_id('EHEC_DB') is null
  BEGIN;
	CREATE DATABASE EHEC_DB;
  END;
ELSE
  BEGIN;
	PRINT 'EHEC_DB existiert bereits, Tabellen werden nun gelöscht...';
  END;
GO

SET QUOTED_IDENTIFIER OFF;
GO
USE [EHEC_DB];
GO
IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]');
GO

-- --------------------------------------------------
PRINT 'Dropping existing FOREIGN KEY constraints';
-- --------------------------------------------------

IF OBJECT_ID(N'[dbo].[FK_ResultExam]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[Exam] DROP CONSTRAINT [FK_ResultExam];
GO
IF OBJECT_ID(N'[dbo].[FK_PatientExam]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[Exam] DROP CONSTRAINT [FK_PatientExam];
GO
IF OBJECT_ID(N'[dbo].[FK_DoctorExam]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[Exam] DROP CONSTRAINT [FK_DoctorExam];
GO

IF OBJECT_ID(N'[dbo].[FK_Exam]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[Origin_Exam] DROP CONSTRAINT [FK_Exam];
GO
IF OBJECT_ID(N'[dbo].[FK_Origin]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[Origin_Exam] DROP CONSTRAINT [FK_Origin];
GO
-- --------------------------------------------------
PRINT 'Dropping existing TABLES';
-- --------------------------------------------------

IF OBJECT_ID(N'[dbo].[Patient]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Patient];
GO
IF OBJECT_ID(N'[dbo].[Doctor]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Doctor];
GO
IF OBJECT_ID(N'[dbo].[Origin_Exam]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Origin_Exam];
GO
IF OBJECT_ID(N'[dbo].[Origin]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Origin];
GO
IF OBJECT_ID(N'[dbo].[Exam]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Exam];
GO
IF OBJECT_ID(N'[dbo].[Result]', 'U') IS NOT NULL
    DROP TABLE [dbo].[Result];
GO

-- --------------------------------------------------
PRINT 'Creating all TABLES';
-- --------------------------------------------------

-- Creating table 'Patient'
CREATE TABLE [dbo].[Patient] (
    [PatientId] int IDENTITY(1,1) NOT NULL,
	[PatientUid] nvarchar(max) NOT NULL,
    [FirstName] nvarchar(max)  NOT NULL,
    [LastName] nvarchar(max)  NOT NULL,
    [BirthDate] datetime  NOT NULL,
    [Street] nvarchar(max)  NOT NULL,
    [City] nvarchar(max)  NOT NULL,
	[Region] nvarchar(max) NOT NULL,
	CONSTRAINT [PK_Patient]
    PRIMARY KEY CLUSTERED ([PatientId] ASC)
);
GO

-- Creating table 'Doctor'
CREATE TABLE [dbo].[Doctor] (
    [DoctorId] int IDENTITY(1,1) NOT NULL,
	[DoctorUid] nvarchar(max) NOT NULL,
    [FirstName] nvarchar(max)  NOT NULL,
    [LastName] nvarchar(max)  NOT NULL,
	[DoctorOrigin] nvarchar(max) NOT NULL,
	[Region] nvarchar(max) NOT NULL,
	CONSTRAINT [PK_Doctor]
    PRIMARY KEY CLUSTERED ([DoctorId] ASC)
);
GO

-- Create Table City
CREATE TABLE City(
	CityId int IDENTITY(1,1) NOT NULL,
	CityUid nvarchar(max) NOT NULL,
	CityName nvarchar(max) NOT NULL,
	CONSTRAINT PK_CityId
	PRIMARY KEY CLUSTERED (CityId ASC)
);
GO
-- Creating table 'Origin'
CREATE TABLE [dbo].[Origin] (
    [OriginId] int IDENTITY(1,1) NOT NULL,
	[OriginUid] nvarchar(max) NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
	[Food] nvarchar(max) NOT NULL,
    [Street] nvarchar(max)  NOT NULL,
    [CityId] int NOT NULL,
	CONSTRAINT [PK_Origin]
    PRIMARY KEY CLUSTERED ([OriginId] ASC),
	CONSTRAINT FK_CityId
	FOREIGN KEY (CityId) REFERENCES City(CityId)
);
GO

-- Creating table 'Result'
CREATE TABLE [dbo].[Result] (
    [ResultId] int IDENTITY(1,1) NOT NULL,
	[ResultUid] nvarchar(max) NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
	CONSTRAINT [PK_Result]
    PRIMARY KEY CLUSTERED ([ResultId] ASC)
);
GO

-- Creating table 'Exam'
CREATE TABLE [dbo].[Exam] (
    [ExamId] int IDENTITY(1,1) NOT NULL,
	[ExamUid] nvarchar(max) NOT NULL,
    [DoctorId] int  NOT NULL,
	[PatientId] int NOT NULL,
    [ResultId] int  NOT NULL,
	CONSTRAINT [PK_Exam]
    PRIMARY KEY CLUSTERED ([ExamId] ASC),
	CONSTRAINT [FK_ResultExam]
    FOREIGN KEY ([ResultId])
    REFERENCES [dbo].[Result]([ResultId])
    ON DELETE NO ACTION ON UPDATE NO ACTION,
	CONSTRAINT [FK_DoctorExam]
    FOREIGN KEY ([DoctorId])
    REFERENCES [dbo].[Doctor]([DoctorId])
    ON DELETE NO ACTION ON UPDATE NO ACTION,
	CONSTRAINT [FK_PatientExam]
    FOREIGN KEY ([PatientId])
    REFERENCES [dbo].[Patient]([PatientId])
    ON DELETE NO ACTION ON UPDATE NO ACTION
);
GO	

-- Creating table 'Origin_Exam'
CREATE TABLE [dbo].[Origin_Exam] (
    [Origin_ExamId] int IDENTITY(1,1) NOT NULL,
	[Origin_ExamUid] nvarchar(max) NOT NULL,
    [OriginId] int  NOT NULL,
	[ExamId] int NOT NULL,
	CONSTRAINT [PK_Origin_Exam]
    PRIMARY KEY CLUSTERED ([Origin_ExamId] ASC),
	CONSTRAINT [FK_Origin]
    FOREIGN KEY ([OriginId])
    REFERENCES [dbo].[Origin] ([OriginId])
    ON DELETE NO ACTION ON UPDATE NO ACTION,
	CONSTRAINT [FK_Exam]
    FOREIGN KEY ([ExamId])
    REFERENCES [dbo].[Exam]([ExamId])
    ON DELETE NO ACTION ON UPDATE NO ACTION
);
GO

-- --------------------------------------------------
PRINT 'Creating all INDEXES';
-- --------------------------------------------------
-- Creating non-clustered index for FOREIGN KEY 'FK_ResultExam'
CREATE INDEX [IX_FK_ResultExam]
ON [dbo].[Exam]
    ([ResultId]);
GO
-- Creating non-clustered index for FOREIGN KEY 'FK_DoctorExam'
CREATE INDEX [IX_FK_DoctorExam]
ON [dbo].[Exam]
    ([DoctorId]);
GO
-- Creating non-clustered index for FOREIGN KEY 'FK_DoctorExam'
CREATE INDEX [IX_FK_PatientExam]
ON [dbo].[Exam]
    ([PatientId]);
GO
-- Creating non-clustered index for FOREIGN KEY 'FK_Origin_Exam'
CREATE INDEX [IX_FK_Origin]
ON [dbo].[Origin_Exam]
    ([OriginId]);
GO
-- Creating non-clustered index for FOREIGN KEY 'FK_Origin_Exam'
CREATE INDEX [IX_FK_Exam]
ON [dbo].[Origin_Exam]
    ([ExamId]);
GO

-- --------------------------------------------------
IF DATABASEPROPERTYEX('EHEC_DB','UserAccess') = 'SINGLE_USER'
	begin;
		PRINT 'Set Singleuser mode back to Multiuser mode.';
		-- set DB back to Multiuser so multiconnections are alowed again.
		ALTER DATABASE EHEC_DB SET MULTI_USER
	end;
-- --------------------------------------------------
PRINT 'Successfull created your DB!';
-- Script has ended
-- --------------------------------------------------