Files
Dokumenten-Check/Scripts/Datenmodell DocumentCheck.sql

548 lines
19 KiB
MySQL
Raw Permalink Normal View History

2026-04-27 14:57:33 +02:00
drop table dc_users cascade constraints;
drop table dc_document_types cascade constraints;
drop table dc_user_roles cascade constraints;
drop table dc_question_catalogs cascade constraints;
drop table dc_question_categories cascade constraints;
drop table dc_questions cascade constraints;
drop table dc_reference_documents cascade constraints;
drop table dc_projects cascade constraints;
drop table dc_project_documents cascade constraints;
drop table dc_results cascade constraints;
-- create tables
create table dc_users (
id number generated by default on null as identity
constraint dc_users_id_pk primary key,
username varchar2(50 char)
constraint users_username_unq unique not null,
email varchar2(100 char)
constraint users_email_unq unique not null,
password_hash varchar2(255 char),
role varchar2(20 char),
is_active number default on null 1,
created_at date default on null sysdate,
updated_at date default on null sysdate,
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
create table dc_document_types (
id number generated by default on null as identity
constraint dc_document_types_id_pk primary key,
name varchar2(100 char) not null,
description clob,
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
create table dc_reference_documents (
id number generated by default on null as identity
constraint dc_reference_documents_id_pk primary key,
uploaded_by number constraint dc_reference_documents_uploaded_by_fk
references dc_users,
document_type_id number constraint dc_reference_documents_doc_type_fk
references dc_document_types,
name varchar2(100 char) not null,
description clob,
file_path varchar2(500 char),
upload_date date default on null sysdate,
mime_type varchar2(100 char),
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_reference_documents_i1 on dc_reference_documents (uploaded_by);
create table dc_user_roles (
id number generated by default on null as identity
constraint dc_user_roles_id_pk primary key,
role_name varchar2(20 char)
constraint user_roles_role_name_unq unique not null,
description clob,
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
create table dc_question_catalogs (
id number generated by default on null as identity
constraint dc_question_catalogs_id_pk primary key,
created_by_user number constraint dc_question_catalogs_created_by_fk
references dc_users,
based_on_reference number constraint dc_question_catalogs_reference_document_fk
references dc_reference_documents,
document_type_id number constraint dc_question_catalogs_doc_type_fk
references dc_document_types,
name varchar2(100 char) not null,
description varchar2(4000 char),
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_question_catalogs_i1 on dc_question_catalogs (created_by);
create table dc_question_categories (
id number generated by default on null as identity
constraint dc_question_categories_id_pk primary key,
catalog_id number constraint dc_question_categories_catalog_id_fk
references dc_question_catalogs,
name varchar2(100 char) not null,
description varchar2(4000 char),
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_question_categories_i1 on dc_question_categories (catalog_id);
create table dc_questions (
id number generated by default on null as identity
constraint dc_questions_id_pk primary key,
category_id number constraint dc_questions_category_id_fk
references dc_question_categories,
question_text clob not null,
evaluation_type varchar2(20 char),
threshold number,
result_handling varchar2(20 char),
example_0_percent clob,
example_100_percent clob,
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_questions_i1 on dc_questions (category_id);
create table dc_projects (
id number generated by default on null as identity
constraint dc_projects_id_pk primary key,
catalog_id number constraint dc_projects_catalog_id_fk
references dc_question_catalogs,
created_by_user number constraint dc_projects_created_by_fk
references dc_users,
name varchar2(100 char) not null,
description clob,
status varchar2(20 char) constraint dc_projects_status_ck
check (status in ('PENDING','IN_PROGRESS','COMPLETED')),
progress number default on null 0,
completed_at date,
notification_email varchar2(100 char),
notify_ok char(1 char) default 'Y' not null
constraint dc_projects_notify_ok_ck
check (notify_ok in ('Y','N')),
notify_hinweis char(1 char) default 'Y' not null
constraint dc_projects_notify_hinweis_ck
check (notify_hinweis in ('Y','N')),
notify_abweichend char(1 char) default 'Y' not null
constraint dc_projects_notify_abweichend_ck
check (notify_abweichend in ('Y','N')),
2026-04-27 14:57:33 +02:00
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_projects_i1 on dc_projects (catalog_id);
create index dc_projects_i2 on dc_projects (created_by);
create table dc_project_documents (
id number generated by default on null as identity
constraint dc_project_documents_id_pk primary key,
project_id number constraint dc_project_documents_project_id_fk
references dc_projects,
document_type_id number constraint dc_project_documents_doc_type_fk
references dc_document_types,
catalog_id number constraint dc_project_documents_catalog_id_fk
references dc_question_catalogs,
status varchar2(20 char) default on null 'PENDING'
constraint dc_project_documents_status_ck
check (status in ('PENDING','IN_PROGRESS','COMPLETED','ERROR')),
progress number default on null 0,
2026-04-27 14:57:33 +02:00
original_file blob,
original_text clob,
translated_text clob,
filename varchar2(255 char) not null,
mime_type varchar2(100 char),
uploaded_at date default on null sysdate,
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_project_documents_i1 on dc_project_documents (project_id);
create table dc_results (
id number generated by default on null as identity
constraint dc_results_id_pk primary key,
project_id number constraint dc_results_project_id_fk
references dc_projects,
question_id number constraint dc_results_question_id_fk
references dc_questions,
doc_id number constraint dc_results_doc_id_fk
references dc_project_documents,
answer clob,
score number,
result_type varchar2(20 char) constraint dc_results_result_type_ck
check (result_type in ('OK','UNKLAR','NOK')),
deviation number default on null 0,
warning number default on null 0,
the_comment clob,
evaluated_at date default on null sysdate,
row_version integer not null,
created date not null,
created_by varchar2(255 char) not null,
updated date not null,
updated_by varchar2(255 char) not null
);
-- table index
create index dc_results_i1 on dc_results (project_id);
create index dc_results_i2 on dc_results (question_id);
create index dc_results_i3 on dc_results (doc_id);
-- triggers
create or replace trigger dc_users_biu
before insert or update
on dc_users
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_users_biu;
/
create or replace trigger dc_user_roles_biu
before insert or update
on dc_user_roles
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_user_roles_biu;
/
create or replace trigger dc_document_types_biu
before insert or update
on dc_document_types
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_document_types_biu;
/
create or replace trigger dc_question_catalogs_biu
before insert or update
on dc_question_catalogs
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_question_catalogs_biu;
/
create or replace trigger dc_question_categories_biu
before insert or update
on dc_question_categories
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_question_categories_biu;
/
create or replace trigger dc_questions_biu
before insert or update
on dc_questions
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_questions_biu;
/
create or replace trigger dc_reference_documents_biu
before insert or update
on dc_reference_documents
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_reference_documents_biu;
/
create or replace trigger dc_projects_biu
before insert or update
on dc_projects
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_projects_biu;
/
create or replace trigger dc_project_documents_biu
before insert or update
on dc_project_documents
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_project_documents_biu;
/
create or replace trigger dc_results_biu
before insert or update
on dc_results
for each row
begin
if inserting then
:new.row_version := 1;
elsif updating then
:new.row_version := NVL(:old.row_version, 0) + 1;
end if;
if inserting then
:new.created := sysdate;
:new.created_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end if;
:new.updated := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
end dc_results_biu;
/
-- Generated by Quick SQL 1.2.9 13.4.2026, 17:07:42
/*
users
id number generated by default on null as identity constraint users_id_pk primary key
username vc50 /nn /unique
email vc100 /nn /unique
password_hash vc255
role vc20
is_active num /default 1
created_at date /default sysdate
updated_at date /default sysdate
user_roles
id number generated by default on null as identity constraint user_roles_id_pk primary key
role_name vc20 /nn /unique
description clob
question_catalogs
id number generated by default on null as identity constraint question_catalogs_id_pk primary key
name vc100 /nn
description clob
created_by num /references users
created_at date /default sysdate
updated_at date /default sysdate
question_categories
id number generated by default on null as identity constraint question_categories_id_pk primary key
catalog_id num /references question_catalogs
name vc100 /nn
description clob
questions
id number generated by default on null as identity constraint questions_id_pk primary key
category_id num /references question_categories
question_text clob /nn
evaluation_type vc20
threshold num
result_handling vc20
example_0_percent clob
example_100_percent clob
reference_documents
id number generated by default on null as identity constraint reference_documents_id_pk primary key
name vc100 /nn
description clob
file_path vc500
uploaded_by num /references users
upload_date date /default sysdate
mime_type vc100
projects
id number generated by default on null as identity constraint projects_id_pk primary key
name vc100 /nn
description clob
catalog_id num /references question_catalogs
created_by num /references users
created_at date /default sysdate
status vc20 /check PENDING, IN_PROGRESS, COMPLETED
progress num /default 0
completed_at date
notification_email vc100
project_documents
id number generated by default on null as identity constraint project_documents_id_pk primary key
project_id num /references projects
original_file blob
translated_file blob
filename vc255 /nn
mime_type vc100
uploaded_at date /default sysdate
results
id number generated by default on null as identity constraint results_id_pk primary key
project_id num /references projects
question_id num /references questions
doc_id num /references project_documents
answer clob
score num
result_type vc20 /check OK, UNKLAR, NOK
deviation num /default 0
warning num /default 0
comment clob
evaluated_at date /default sysdate
Non-default options:
# settings = {"apex":"Y","auditcols":"Y","db":"23","drop":"Y","prefix":"Dc","pk":"IDENTITY","rowversion":"Y"}
*/