From 5583449c0da28c96eadc8142fdbc33e18ade5674 Mon Sep 17 00:00:00 2001 From: Wolfgang Ludger Hottgenroth Date: Tue, 29 Jun 2021 19:22:08 +0200 Subject: [PATCH] changes --- initial/schema.sql | 158 ++++++++++++++++++++++++++++++++++--------- initial/testdata.sql | 40 +++++++++++ 2 files changed, 167 insertions(+), 31 deletions(-) create mode 100644 initial/testdata.sql diff --git a/initial/schema.sql b/initial/schema.sql index 023d2f8..b4f3d49 100644 --- a/initial/schema.sql +++ b/initial/schema.sql @@ -1,9 +1,23 @@ +create sequence account_s + start with 1 + increment by 1; + +create table account_t ( + id integer not null default nextval('account_s'), + comment varchar(128) not null, + constraint account_t_pk primary key (id) +); + +alter table account_t rename column comment to description; + + + create sequence tenant_s start with 1 increment by 1; create table tenant_t ( - id integer primary key not null default nextval('tenant_s'), + id integer not null default nextval('tenant_s'), salutation varchar(128) default null, firstname varchar(128) default null, lastname varchar(128) not null, @@ -14,61 +28,126 @@ create table tenant_t ( city varchar(128) default null, phone1 varchar(64) default null, phone2 varchar(64) default null, - iban varchar(34) default null + iban varchar(34) default null, + account integer not null, + constraint tenant_t_pk primary key (id), + constraint tenant_t_account_uk unique (id), + constraint tenant_t_account_fk foreign key (account) references account_t (id) ); +alter table tenant_t rename column account to fee_account; + +alter table tenant_t add column overhead_account integer; +alter table tenant_t add constraint tenant_t_overhead_account_fk foreign key (overhead_account) references account_t (id); + +alter table tenant_t add column disposit_account integer; +alter table tenant_t add constraint tenant_t_disposit_account_fk foreign key (disposit_account) references account_t (id); + +alter table tenant_t alter column overhead_account set not null; +alter table tenant_t alter column disposit_account set not null; + + create sequence premise_s start with 1 increment by 1; create table premise_t ( - id integer primary key not null default nextval('premise_s'), + id integer not null default nextval('premise_s'), street varchar(128) not null, zip varchar(10) not null, - city varchar(128) not null + city varchar(128) not null, + constraint premise_t_pk primary key (id) ); -create sequence rented_object_s +create sequence flat_s start with 1 increment by 1; -create table rented_object_t ( - id integer primary key not null default nextval('rented_object_s'), - comment varchar(32) default null, - premise integer references premise_t(id) -); - create table flat_t ( + id integer not null default nextval('flat_s'), + description varchar(32) default null, + premise integer, area numeric(10,2) not null, - flat_no integer default null -) inherits (rented_object_t); + flat_no integer default null, + constraint flat_t_pk primary key (id), + constraint flat_t_premise_fk foreign key (premise) references premise_t (id) +); create sequence overhead_advance_s start with 1 increment by 1; create table overhead_advance_t ( - id integer primary key not null default nextval('overhead_advance_s'), - comment varchar(128) default null, - rented_object integer not null references rented_object_t(id), + id integer not null default nextval('overhead_advance_s'), + description varchar(128) default null, amount numeric(10, 4) not null, startdate date default null, - enddate date default null + enddate date default null, + constraint overhead_advance_t_pk primary key (id) ); -create table parking_t ( -) inherits (rented_object_t); +create sequence overhead_advance_flat_mapping_s + start with 1 + increment by 1; + +create table overhead_advance_flat_mapping_t ( + id integer not null default nextval('overhead_advance_flat_mapping_s'), + overhead_advance integer not null, + flat integer not null, + constraint overhead_advance_flat_mapping_t_pk primary key (id), + constraint overhead_advance_flat_mapping_t_overhead_advance_fk foreign key (overhead_advance) references overhead_advance_t (id), + constraint overhead_advance_flat_mapping_t_flat_fk foreign key (flat) references flat_t (id) +); + + + +create sequence parking_s + start with 1 + increment by 1; + +create table parking_t ( + id integer not null default nextval('parking_s'), + description varchar(32) default null, + premise integer, + constraint parking_t_pk primary key (id), + constraint parking_t_premise_fk foreign key (premise) references premise_t (id) +); + +create sequence commercial_premise_s + start with 1 + increment by 1; create table commercial_premise_t ( + id integer not null default nextval('commercial_premise_s'), + description varchar(32) default null, + premise integer, + constraint commercial_premise_t_pk primary key (id), + constraint commercial_premise_t_premise_fk foreign key (premise) references premise_t (id) +); -) inherits (rented_object_t); +create sequence tenancy_s + start with 1 + increment by 1; create table tenancy_t ( - tenant integer not null references tenant_t(id), - rented_object integer not null references rented_object_t(id), + id integer not null default nextval('tenancy_s'), + tenant integer not null, + flat integer default null, + parking integer default null, + commercial_premise integer default null, startdate date not null, - enddate date default null + enddate date default null, + constraint tenancy_t_pk primary key (id), + constraint tenancy_t_tenant_fk foreign key (tenant) references tenant_t (id), + constraint tenancy_t_flat_fk foreign key (flat) references flat_t (id) match simple, + constraint tenancy_t_parking_fk foreign key (parking) references parking_t (id) match simple, + constraint tenancy_t_commercial_premise_fk foreign key (commercial_premise) references commercial_premise_t (id) match simple, + constraint tenancy_t_only_one_object check ( + (flat is not null and parking is null and commercial_premise is null) or + (flat is null and parking is not null and commercial_premise is null) or + (flat is null and parking is null and commercial_premise is not null) + ) ); create sequence fee_s @@ -76,16 +155,31 @@ create sequence fee_s increment by 1; create table fee_t ( - id integer primary key not null default nextval('fee_s'), + id integer not null default nextval('fee_s'), comment varchar(128) default null, amount numeric(10, 2) not null, startdate date default null, - enddate date default null + enddate date default null, + constraint fee_t_pk primary key (id) ); -create table rented_object_fee_mapping_t ( - rented_object integer not null references rented_object_t(id), - fee integer not null references fee_t(id) +CREATE TYPE fee_type_e AS ENUM ('per_area', 'total'); + +alter table fee_t add column fee_type fee_type_e; +ALTER TABLE fee_t ALTER COLUMN fee_type SET NOT NULL; + + +create sequence tenancy_fee_mapping_s + start with 1 + increment by 1; + +create table tenancy_fee_mapping_t ( + id integer not null default nextval('tenancy_fee_mapping_s'), + tenancy integer not null, + fee integer not null, + constraint tenancy_fee_mapping_t_pk primary key (id), + constraint tenancy_fee_mapping_t_tenancy_fk foreign key (tenancy) references tenancy_t (id), + constraint tenancy_fee_mapping_t_fee_fk foreign key (fee) references fee_t (id) ); @@ -95,11 +189,13 @@ create sequence account_entry_s increment by 1; create table account_entry_t ( - id integer primary key not null default nextval('account_entry_s'), - tenant integer not null references tenant_t(id), + id integer not null default nextval('account_entry_s'), + account integer not null, created_at date not null default now(), amount numeric(10, 2) not null, - comment varchar(32) not null + comment varchar(32) not null, + constraint account_entry_t_pk primary key (id), + constraint account_entry_t_account_fk foreign key (account) references account_t (id) ); diff --git a/initial/testdata.sql b/initial/testdata.sql new file mode 100644 index 0000000..a6669b8 --- /dev/null +++ b/initial/testdata.sql @@ -0,0 +1,40 @@ +insert into account_t (description) values ('fee testtenant1'); +insert into account_t (description) values ('overhead testtenant1'); +insert into account_t (description) values ('disposit testtenant1'); + +insert into tenant_t (lastname, fee_account, overhead_account, disposit_account) values ( + 'testtenant1', + (select id from account_t where comment = 'fee testtenant1'), + (select id from account_t where comment = 'overhead testtenant1'), + (select id from account_t where comment = 'disposit testtenant1'), +); + +insert into premise_t (street, zip, city) values ('Hemsingskotten 38', '45259', 'Essen'); + +insert into parking_t (description, premise) values ('Garage 1', (select id from premise_t where street = 'Hemsingskotten 38')); + +insert into flat_t (description, premise, area, flat_no) values('EG links', (select id from premise_t where street = 'Hemsingskotten 38'), 59.0, 1); + +insert into fee_t (comment, amount, fee_type, startdate) values ('Altenwohnung Hemsingskotten', 5.23, 'per_area', '2021-01-01'); + +insert into fee_t (comment, amount, fee_type, startdate) values ('Garage intern', 30.0, 'total', '2021-01-01'); + +insert into tenancy_t (tenant, flat, startdate) values ( + (select id from tenant_t where lastname = 'testtenant1'), + (select id from flat_t where flat_no = 1), + '2021-06-01' +); + +insert into tenancy_t (tenant, parking, startdate) values ( + (select id from tenant_t where lastname = 'testtenant1'), + (select id from parking_t where description = 'Garage 1'), + '2021-06-01' +); + +insert into overhead_advance_t (description, amount, startdate) values ('BKV Altenwohnung Hemsingskotten', 0.34, '2021-01-01'); + +insert into overhead_advance_flat_mapping_t (overhead_advance, flat) values ( + (select id from overhead_advance_t where description = 'BKV Altenwohnung Hemsingskotten'), + (select id from flat_t where flat_no = 1) +); +