Exported tables

This commit is contained in:
Jan Kvetina 2022-07-04 06:49:28 +02:00
parent 22422550a2
commit 5ba4c0299e
21 changed files with 364 additions and 454 deletions

View File

@ -1,22 +1,18 @@
--DROP TABLE apps CASCADE CONSTRAINTS;
CREATE TABLE apps (
app_id NUMBER(4) CONSTRAINT nn_apps_app_id NOT NULL,
--
description_ VARCHAR2(1000),
is_visible CHAR(1),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_apps
PRIMARY KEY (app_id),
app_id NUMBER(4,0) CONSTRAINT nn_apps_app_id NOT NULL,
description_ VARCHAR2(1000),
is_visible CHAR(1),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT ch_apps_is_visible
CHECK (is_visible = 'Y' OR is_visible IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
CHECK (is_visible = 'Y' OR is_visible IS NULL),
--
CONSTRAINT pk_apps
PRIMARY KEY (app_id)
);
--
COMMENT ON TABLE apps IS '[CORE] List of apps';
COMMENT ON TABLE apps IS '[CORE] List of apps';
--
COMMENT ON COLUMN apps.app_id IS 'APEX application ID';
COMMENT ON COLUMN apps.description_ IS 'Description, until I know how to edit documentation_banner';

View File

@ -1,30 +1,25 @@
--DROP TABLE logs_events PURGE;
--DROP TABLE events PURGE;
CREATE TABLE events (
app_id NUMBER(4) CONSTRAINT nn_events_app_id NOT NULL,
event_id VARCHAR2(30) CONSTRAINT nn_events_event_id NOT NULL,
app_id NUMBER(4,0) CONSTRAINT nn_events_app_id NOT NULL,
event_id VARCHAR2(30) CONSTRAINT nn_events_event_id NOT NULL,
event_name VARCHAR2(64),
event_group VARCHAR2(64),
description_ VARCHAR2(1000),
is_active CHAR(1),
updated_by VARCHAR2(30) DEFAULT NULL,
updated_at DATE,
--
event_name VARCHAR2(64),
event_group VARCHAR2(64),
description_ VARCHAR2(1000),
is_active CHAR(1),
--
updated_by VARCHAR2(30),
updated_at DATE,
CONSTRAINT ch_events_is_active
CHECK (is_active = 'Y' OR is_active IS NULL),
--
CONSTRAINT pk_events
PRIMARY KEY (app_id, event_id),
PRIMARY KEY (app_id, event_id)
--
CONSTRAINT fk_events_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
--
CONSTRAINT ch_events_is_active
CHECK (is_active = 'Y' OR is_active IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
REFERENCES apps (app_id)
);
--
COMMENT ON TABLE events IS '[CORE] List of events interesting for business';
COMMENT ON TABLE events IS '[CORE] List of events interesting for business';
--
COMMENT ON COLUMN events.app_id IS 'APEX application ID';
COMMENT ON COLUMN events.event_id IS 'Event id';

View File

@ -1,20 +1,16 @@
--DROP TABLE log_events PURGE;
CREATE TABLE log_events (
log_id INTEGER CONSTRAINT nn_log_events_log_id NOT NULL,
log_parent INTEGER,
--
app_id NUMBER(4) CONSTRAINT nn_log_events_app_id NOT NULL,
page_id NUMBER(6) CONSTRAINT nn_log_events_page_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_log_events_user_id NOT NULL,
session_id INTEGER CONSTRAINT nn_log_events_session_id NOT NULL,
--
event_id VARCHAR2(30) CONSTRAINT nn_log_events_event_id NOT NULL,
event_value NUMBER,
--
created_at DATE CONSTRAINT nn_log_events_created_at NOT NULL,
log_id INTEGER CONSTRAINT nn_log_events_log_id NOT NULL,
log_parent INTEGER,
app_id NUMBER(4,0) CONSTRAINT nn_log_events_app_id NOT NULL,
page_id NUMBER(6,0) CONSTRAINT nn_log_events_page_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_log_events_user_id NOT NULL,
session_id INTEGER CONSTRAINT nn_log_events_session_id NOT NULL,
event_id VARCHAR2(30) CONSTRAINT nn_log_events_event_id NOT NULL,
event_value NUMBER,
created_at DATE CONSTRAINT nn_log_events_created_at NOT NULL,
--
CONSTRAINT pk_log_events
PRIMARY KEY (log_id),
PRIMARY KEY (log_id)
--
CONSTRAINT fk_log_events_event_id
FOREIGN KEY (app_id, event_id)
@ -22,20 +18,18 @@ CREATE TABLE log_events (
--
CONSTRAINT fk_log_events_users
FOREIGN KEY (user_id)
REFERENCES users (user_id)
REFERENCES users (user_id) DISABLE
);
--
ALTER TABLE log_events DISABLE CONSTRAINT fk_log_events_users;
COMMENT ON TABLE log_events IS '[CORE] List of business events';
--
COMMENT ON TABLE log_events IS '[CORE] List of business events';
--
COMMENT ON COLUMN log_events.log_id IS 'Log ID';
COMMENT ON COLUMN log_events.log_parent IS 'Referenced log_id from LOGS table';
COMMENT ON COLUMN log_events.app_id IS 'App';
COMMENT ON COLUMN log_events.page_id IS 'Page';
COMMENT ON COLUMN log_events.user_id IS 'User';
COMMENT ON COLUMN log_events.session_id IS 'Session id';
COMMENT ON COLUMN log_events.event_id IS 'Event code from EVENTS table';
COMMENT ON COLUMN log_events.event_value IS 'Optional business value';
COMMENT ON COLUMN log_events.created_at IS 'Datetime of the event';
COMMENT ON COLUMN log_events.log_id IS 'Log ID';
COMMENT ON COLUMN log_events.log_parent IS 'Referenced log_id from LOGS table';
COMMENT ON COLUMN log_events.app_id IS 'App';
COMMENT ON COLUMN log_events.page_id IS 'Page';
COMMENT ON COLUMN log_events.user_id IS 'User';
COMMENT ON COLUMN log_events.session_id IS 'Session id';
COMMENT ON COLUMN log_events.event_id IS 'Event code from EVENTS table';
COMMENT ON COLUMN log_events.event_value IS 'Optional business value';
COMMENT ON COLUMN log_events.created_at IS 'Datetime of the event';

View File

@ -1,55 +1,34 @@
/*
UPDATE sessions SET log_id = NULL;
UPDATE uploaded_file_sheets SET result_log_id = NULL;
--
DROP TABLE log_events PURGE;
DROP TABLE logs_blacklist PURGE;
DROP TABLE logs PURGE;
--
SELECT * FROM logs ORDER BY 1 DESC;
*/
CREATE TABLE logs (
log_id INTEGER CONSTRAINT nn_logs_log_id NOT NULL, -- NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL
log_parent INTEGER,
--
app_id NUMBER(4) CONSTRAINT nn_logs_app_id NOT NULL,
page_id NUMBER(6),
user_id VARCHAR2(30),
flag CHAR(1) CONSTRAINT nn_logs_flag NOT NULL,
--
action_name VARCHAR2(64),
module_name VARCHAR2(64), -- 48 chars, DBMS_APPLICATION_INFO limit
module_line NUMBER(8),
module_timer VARCHAR2(12), -- 00:00:00.000 - INTERVAL DAY(1) TO SECOND(3),
arguments VARCHAR2(2000),
payload VARCHAR2(4000),
--
session_id INTEGER,
created_at TIMESTAMP CONSTRAINT nn_logs_created_at NOT NULL,
log_id INTEGER CONSTRAINT nn_logs_log_id NOT NULL,
log_parent INTEGER,
app_id NUMBER(4,0) CONSTRAINT nn_logs_app_id NOT NULL,
page_id NUMBER(6,0),
user_id VARCHAR2(30),
flag CHAR(1) CONSTRAINT nn_logs_flag NOT NULL,
action_name VARCHAR2(32),
module_name VARCHAR2(48),
module_line NUMBER(8,0),
module_timer VARCHAR2(12),
arguments VARCHAR2(2000),
payload VARCHAR2(4000),
session_id INTEGER,
created_at TIMESTAMP(6) CONSTRAINT nn_logs_created_at NOT NULL,
--
CONSTRAINT pk_logs
PRIMARY KEY (log_id)
--
-- NO MORE CONSTRAINTS TO KEEP THIS AS FAST AS POSSIBLE
--
)
PARTITION BY RANGE (created_at)
INTERVAL (NUMTODSINTERVAL(1, 'DAY')) (
PARTITION P00 VALUES LESS THAN (TIMESTAMP '2021-01-01 00:00:00')
/*
--today VARCHAR2(10) CONSTRAINT nn_logs_today NOT NULL, -- virtual column?
PARTITION BY LIST (today, app_id) AUTOMATIC (
PARTITION "P_20210101_0" VALUES (('2021-01-01', 0)) SEGMENT CREATION IMMEDIATE
*/
PARTITION BY RANGE (created_at) INTERVAL (NUMTODSINTERVAL(1, 'DAY'))
(
PARTITION "SYS_P3208" VALUES LESS THAN (TIMESTAMP '2022-06-28 00:00:00')
);
--
COMMENT ON TABLE logs IS '[CORE] Various logs raised in application; daily partitions';
COMMENT ON TABLE logs IS '[CORE] Various logs raised in application; daily partitions';
--
COMMENT ON COLUMN logs.log_id IS 'Log ID generated from LOG_ID sequence';
COMMENT ON COLUMN logs.log_parent IS 'Parent log record; dont use FK to avoid deadlocks';
COMMENT ON COLUMN logs.app_id IS 'APEX Application ID';
COMMENT ON COLUMN logs.user_id IS 'User ID';
COMMENT ON COLUMN logs.page_id IS 'APEX Application PAGE ID';
COMMENT ON COLUMN logs.user_id IS 'User ID';
COMMENT ON COLUMN logs.flag IS 'Type of error listed in tree package specification; FK missing for performance reasons';
COMMENT ON COLUMN logs.action_name IS 'Action name to distinguish position in module or use it as warning/error names';
COMMENT ON COLUMN logs.module_name IS 'Module name (procedure or function name)';

View File

@ -1,17 +1,15 @@
--DROP TABLE logs_blacklist CASCADE CONSTRAINTS PURGE;
CREATE TABLE logs_blacklist (
app_id NUMBER(4), -- CONSTRAINT nn_logs_blacklist_app_id NOT NULL,
flag CHAR(1),
user_id VARCHAR2(30),
page_id NUMBER(6),
module_like VARCHAR2(30),
action_like VARCHAR2(30),
--
updated_by VARCHAR2(30),
updated_at DATE,
app_id NUMBER(4,0),
flag CHAR(1),
user_id VARCHAR2(30),
page_id NUMBER(6,0),
module_like VARCHAR2(30),
action_like VARCHAR2(30),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT uq_logs_blacklist
UNIQUE (app_id, user_id, page_id, flag, module_like, action_like),
UNIQUE (app_id, user_id, page_id, flag, module_like, action_like)
--
CONSTRAINT fk_logs_blacklist_app_id
FOREIGN KEY (app_id)
@ -19,18 +17,15 @@ CREATE TABLE logs_blacklist (
--
CONSTRAINT fk_logs_blacklist_user_id
FOREIGN KEY (user_id)
REFERENCES users (user_id)
)
STORAGE (BUFFER_POOL KEEP);
REFERENCES users (user_id) DISABLE
);
--
ALTER TABLE logs_blacklist DISABLE CONSTRAINT fk_logs_blacklist_user_id;
--
COMMENT ON TABLE logs_blacklist IS '[CORE] Define what logs will or wont be tracked';
COMMENT ON TABLE logs_blacklist IS '[CORE] Define what logs will or wont be tracked';
--
COMMENT ON COLUMN logs_blacklist.app_id IS 'App ID';
COMMENT ON COLUMN logs_blacklist.flag IS 'Flag to differentiate logs, NULL = any flag';
COMMENT ON COLUMN logs_blacklist.page_id IS 'APEX page ID, NULL = any page';
COMMENT ON COLUMN logs_blacklist.user_id IS 'User ID, NULL = any user';
COMMENT ON COLUMN logs_blacklist.page_id IS 'APEX page ID, NULL = any page';
COMMENT ON COLUMN logs_blacklist.module_like IS 'Module name, NULL = any module';
COMMENT ON COLUMN logs_blacklist.action_like IS 'Action name, NULL = any module';

View File

@ -1,29 +1,24 @@
--DROP TABLE mail_queue PURGE;
CREATE TABLE mail_queue (
queue_id NUMBER(10) CONSTRAINT nn_mail_queue_queue_id NOT NULL,
app_id NUMBER(4) CONSTRAINT nn_mail_queue_app_id NOT NULL,
event_id VARCHAR2(30),
role_id VARCHAR2(30),
template_id VARCHAR2(30),
schedule_id VARCHAR2(30),
user_id VARCHAR2(30),
lang_id VARCHAR2(5),
--
mail_recipient VARCHAR2(4000), -- mail headers
mail_cc VARCHAR2(4000),
mail_bcc VARCHAR2(4000),
mail_sender VARCHAR2(256),
mail_subject VARCHAR2(256),
mail_body CLOB, -- mail body
--
-- @TODO: mail_attachments
--
created_by VARCHAR2(30),
created_at DATE,
sent_at DATE,
queue_id NUMBER(10,0) CONSTRAINT nn_mail_queue_queue_id NOT NULL,
app_id NUMBER(4,0) CONSTRAINT nn_mail_queue_app_id NOT NULL,
event_id VARCHAR2(30),
role_id VARCHAR2(30),
template_id VARCHAR2(30),
schedule_id VARCHAR2(30),
user_id VARCHAR2(30),
lang_id VARCHAR2(5),
mail_recipient VARCHAR2(4000),
mail_cc VARCHAR2(4000),
mail_bcc VARCHAR2(4000),
mail_sender VARCHAR2(256),
mail_subject VARCHAR2(256),
mail_body CLOB,
created_by VARCHAR2(30),
created_at DATE,
sent_at DATE,
--
CONSTRAINT pk_mail_queue
PRIMARY KEY (queue_id),
PRIMARY KEY (queue_id)
--
CONSTRAINT fk_mail_queue_app_id
FOREIGN KEY (app_id)
@ -38,7 +33,7 @@ CREATE TABLE mail_queue (
REFERENCES mail_subscriptions (app_id, event_id, role_id, schedule_id)
);
--
COMMENT ON TABLE mail_queue IS '[CORE] Queue with e-mails to track what was sent and when';
COMMENT ON TABLE mail_queue IS '[CORE] Queue with e-mails to track what was sent and when';
--
COMMENT ON COLUMN mail_queue.queue_id IS 'Unique ID from queue_id sequence';
COMMENT ON COLUMN mail_queue.app_id IS 'APEX application ID';
@ -48,14 +43,12 @@ COMMENT ON COLUMN mail_queue.template_id IS '';
COMMENT ON COLUMN mail_queue.schedule_id IS 'Schedule id';
COMMENT ON COLUMN mail_queue.user_id IS '';
COMMENT ON COLUMN mail_queue.lang_id IS '';
--
COMMENT ON COLUMN mail_queue.mail_recipient IS '';
COMMENT ON COLUMN mail_queue.mail_cc IS '';
COMMENT ON COLUMN mail_queue.mail_bcc IS '';
COMMENT ON COLUMN mail_queue.mail_sender IS '';
COMMENT ON COLUMN mail_queue.mail_subject IS 'E-mail subject';
COMMENT ON COLUMN mail_queue.mail_body IS 'E-mail body, can be generated by a process_function';
--
COMMENT ON COLUMN mail_queue.created_by IS 'User whi created the e-mail';
COMMENT ON COLUMN mail_queue.created_at IS 'Time of adding e-mail to the queue';
COMMENT ON COLUMN mail_queue.sent_at IS 'Time when e-mail was actually sent';

View File

@ -1,32 +1,16 @@
--DROP TABLE mail_subscriptions PURGE;
--DROP TABLE mail_schedules PURGE;
CREATE TABLE mail_schedules (
app_id NUMBER(4) CONSTRAINT nn_mail_schedules_app_id NOT NULL,
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_schedules_schedule_id NOT NULL,
schedule_group VARCHAR2(64),
description_ VARCHAR2(256),
--
schedule_month VARCHAR2(128),
schedule_day VARCHAR2(128),
schedule_weekday VARCHAR2(128),
schedule_hour VARCHAR2(128),
schedule_minute VARCHAR2(128),
schedule_interval VARCHAR2(128),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_mail_schedules
PRIMARY KEY (app_id, schedule_id),
--
CONSTRAINT ch_mail_schedules_month
CHECK (REGEXP_LIKE(schedule_month, '^(\d+,?\s*)|(\d+[-]\d+,?\s*)+|([A-Z]{3}\s*)+|([A-Z]{3}[-,][A-Z]{3},?\s*)+$') OR schedule_month IS NULL),
--
CONSTRAINT ch_mail_schedules_day
CHECK (REGEXP_LIKE(schedule_day, '^(\d+,?\s*)|(\d+[-]\d+,?\s*)+$') OR schedule_day IS NULL),
--
CONSTRAINT ch_mail_schedules_weekday
CHECK (REGEXP_LIKE(schedule_weekday, '^(\d+,?\s*)|(\d+[-]\d+,?\s*)+|([A-Z]{3},?\s*)+|([A-Z]{3}[-][A-Z]{3},?\s*)+$') OR schedule_weekday IS NULL),
app_id NUMBER(4,0) CONSTRAINT nn_mail_schedules_app_id NOT NULL,
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_schedules_schedule_id NOT NULL,
schedule_group VARCHAR2(64),
description_ VARCHAR2(256),
schedule_month VARCHAR2(128),
schedule_day VARCHAR2(128),
schedule_weekday VARCHAR2(128),
schedule_hour VARCHAR2(128),
schedule_minute VARCHAR2(128),
schedule_interval VARCHAR2(128),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT ch_mail_schedules_hour
CHECK (REGEXP_LIKE(schedule_hour, '^(\d+,?\s*)+|(\d+[-]\d,?\s*)+$') OR schedule_hour IS NULL),
@ -37,19 +21,31 @@ CREATE TABLE mail_schedules (
CONSTRAINT ch_mail_schedules_interval
CHECK (REGEXP_LIKE(schedule_interval, '^(\d+)$') OR schedule_interval IS NULL),
--
CONSTRAINT pk_mail_schedules
PRIMARY KEY (app_id, schedule_id)
--
CONSTRAINT ch_mail_schedules_min_or_int
CHECK ((schedule_minute IS NULL AND schedule_interval IS NOT NULL) OR (schedule_minute IS NOT NULL AND schedule_interval IS NULL))
CHECK ((schedule_minute IS NULL AND schedule_interval IS NOT NULL) OR (schedule_minute IS NOT NULL AND schedule_interval IS NULL)),
--
CONSTRAINT ch_mail_schedules_day
CHECK (REGEXP_LIKE(schedule_day, '^(\d+,?\s*)|(\d+[-]\d+,?\s*)+$') OR schedule_day IS NULL),
--
CONSTRAINT ch_mail_schedules_weekday
CHECK (REGEXP_LIKE(schedule_weekday, '^(\d+,?\s*)|(\d+[-]\d+,?\s*)+|([A-Z]{3},?\s*)+|([A-Z]{3}[-][A-Z]{3},?\s*)+$') OR schedule_weekday IS NULL),
--
CONSTRAINT ch_mail_schedules_month
CHECK (REGEXP_LIKE(schedule_month, '^(\d+,?\s*)|(\d+[-]\d+,?\s*)+|([A-Z]{3}\s*)+|([A-Z]{3}[-,][A-Z]{3},?\s*)+$') OR schedule_month IS NULL)
);
--
COMMENT ON TABLE mail_schedules IS '[CORE] mail_schedules...';
COMMENT ON TABLE mail_schedules IS '[CORE] mail_schedules...';
--
COMMENT ON COLUMN mail_schedules.app_id IS 'APEX application ID';
COMMENT ON COLUMN mail_schedules.schedule_id IS 'Schedule id';
COMMENT ON COLUMN mail_schedules.schedule_group IS 'Group for better visibility';
COMMENT ON COLUMN mail_schedules.description_ IS 'Description';
COMMENT ON COLUMN mail_schedules.schedule_month IS 'Send at specific month, 1..12 for months, separate values with comma';
COMMENT ON COLUMN mail_schedules.schedule_weekday IS 'Send at specific day in a week, 1..7 (MON..SUN), 1-5 possible';
COMMENT ON COLUMN mail_schedules.schedule_day IS 'Send at specific day of the month, 1..31';
COMMENT ON COLUMN mail_schedules.schedule_weekday IS 'Send at specific day in a week, 1..7 (MON..SUN), 1-5 possible';
COMMENT ON COLUMN mail_schedules.schedule_hour IS 'Send at specific hour, 00..23, 8-17 is possible';
COMMENT ON COLUMN mail_schedules.schedule_minute IS 'Send at specific minute in an hour, 00..59';
COMMENT ON COLUMN mail_schedules.schedule_interval IS 'Send every 1..30 minutes, schedule_minute is ignored';

View File

@ -1,21 +1,21 @@
--DROP TABLE mail_subscriptions PURGE;
CREATE TABLE mail_subscriptions (
app_id NUMBER(4) CONSTRAINT nn_mail_subscriptions_app_id NOT NULL,
event_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_event_id NOT NULL,
role_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_role_id NOT NULL,
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_schedule_id NOT NULL,
template_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_template_id NOT NULL,
eval_function VARCHAR2(64), -- to evaluate on each role user if to send or not
app_id NUMBER(4,0) CONSTRAINT nn_mail_subscriptions_app_id NOT NULL,
event_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_event_id NOT NULL,
role_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_role_id NOT NULL,
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_schedule_id NOT NULL,
template_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_template_id NOT NULL,
eval_function VARCHAR2(64),
is_active CHAR(1),
processed_log_id NUMBER,
processed_at DATE,
updated_by VARCHAR2(30),
updated_at DATE,
--
is_active CHAR(1),
processed_log_id NUMBER,
processed_at DATE,
--
updated_by VARCHAR2(30),
updated_at DATE,
CONSTRAINT ch_mail_subscriptions_is_active
CHECK (is_active = 'Y' OR is_active IS NULL),
--
CONSTRAINT pk_mail_subscriptions
PRIMARY KEY (app_id, event_id, role_id, schedule_id),
PRIMARY KEY (app_id, event_id, role_id, schedule_id)
--
CONSTRAINT fk_mail_subscriptions_event_id
FOREIGN KEY (app_id, event_id)
@ -27,17 +27,10 @@ CREATE TABLE mail_subscriptions (
--
CONSTRAINT fk_mail_subscriptions_schedule_id
FOREIGN KEY (app_id, schedule_id)
REFERENCES mail_schedules (app_id, schedule_id),
--
--CONSTRAINT fk_mail_subscriptions_template_id
-- FOREIGN KEY (app_id, template_id)
-- REFERENCES mail_templates (app_id, template_id), -- we dont know the language
--
CONSTRAINT ch_mail_subscriptions_is_active
CHECK (is_active = 'Y' OR is_active IS NULL)
REFERENCES mail_schedules (app_id, schedule_id)
);
--
COMMENT ON TABLE mail_subscriptions IS '[CORE] Subscriptions to events based on user roles';
COMMENT ON TABLE mail_subscriptions IS '[CORE] Subscriptions to events based on user roles';
--
COMMENT ON COLUMN mail_subscriptions.app_id IS 'APEX application ID';
COMMENT ON COLUMN mail_subscriptions.event_id IS 'Event id';

View File

@ -1,23 +1,20 @@
--DROP TABLE mail_templates PURGE;
CREATE TABLE mail_templates (
app_id NUMBER(4) CONSTRAINT nn_mail_templates_app_id NOT NULL,
template_id VARCHAR2(30) CONSTRAINT nn_mail_templates_template_id NOT NULL,
lang_id VARCHAR2(5) CONSTRAINT nn_mail_templates_lang_id NOT NULL,
template_group VARCHAR2(64),
description_ VARCHAR2(256),
process_function VARCHAR2(64), -- to generate specific content
--
mail_subject VARCHAR2(256),
mail_body CLOB,
--
updated_by VARCHAR2(30),
updated_at DATE,
app_id NUMBER(4,0) CONSTRAINT nn_mail_templates_app_id NOT NULL,
template_id VARCHAR2(30) CONSTRAINT nn_mail_templates_template_id NOT NULL,
lang_id VARCHAR2(5) CONSTRAINT nn_mail_templates_lang_id NOT NULL,
template_group VARCHAR2(64),
description_ VARCHAR2(256),
process_function VARCHAR2(64),
mail_subject VARCHAR2(256),
mail_body CLOB,
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_mail_templates
PRIMARY KEY (app_id, template_id, lang_id)
);
--
COMMENT ON TABLE mail_templates IS '[CORE] E-mail templates';
COMMENT ON TABLE mail_templates IS '[CORE] E-mail templates';
--
COMMENT ON COLUMN mail_templates.app_id IS 'APEX application ID';
COMMENT ON COLUMN mail_templates.template_id IS 'Template id';

View File

@ -1,27 +1,13 @@
--DROP TABLE navigation PURGE;
CREATE TABLE navigation (
app_id NUMBER(4) CONSTRAINT nn_navigation_app_id NOT NULL,
page_id NUMBER(6) CONSTRAINT nn_navigation_page_id NOT NULL,
--
parent_id NUMBER(6),
order# NUMBER(4),
is_hidden CHAR(1),
is_reset CHAR(1),
is_shared CHAR(1), -- only for CORE app
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_navigation
PRIMARY KEY (app_id, page_id),
--
CONSTRAINT fk_navigation_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
--
CONSTRAINT fk_navigation_parent
FOREIGN KEY (app_id, parent_id)
REFERENCES navigation (app_id, page_id),
app_id NUMBER(4,0) CONSTRAINT nn_navigation_app_id NOT NULL,
page_id NUMBER(6,0) CONSTRAINT nn_navigation_page_id NOT NULL,
parent_id NUMBER(6,0),
order# NUMBER(4,0),
is_hidden CHAR(1),
is_reset CHAR(1),
is_shared CHAR(1),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT ch_navigation_is_hidden
CHECK (is_hidden = 'Y' OR is_hidden IS NULL),
@ -29,12 +15,22 @@ CREATE TABLE navigation (
CONSTRAINT ch_navigation_is_reset
CHECK (is_reset = 'Y' OR is_reset IS NULL),
--
CONSTRAINT pk_navigation
PRIMARY KEY (app_id, page_id)
--
CONSTRAINT ch_navigation_is_shared
CHECK (is_shared = 'Y' OR is_shared IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
CHECK (is_shared = 'Y' OR is_shared IS NULL),
--
CONSTRAINT fk_navigation_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
--
CONSTRAINT fk_navigation_parent
FOREIGN KEY (app_id, parent_id)
REFERENCES navigation (app_id, page_id)
);
--
COMMENT ON TABLE navigation IS '[CORE] Navigation items';
COMMENT ON TABLE navigation IS '[CORE] Navigation items';
--
COMMENT ON COLUMN navigation.app_id IS 'APEX application ID';
COMMENT ON COLUMN navigation.page_id IS 'APEX page ID';

View File

@ -1,15 +1,14 @@
--DROP TABLE obj_views_source;
CREATE TABLE obj_views_source (
owner VARCHAR2(30) CONSTRAINT nn_obj_views_source_owner NOT NULL,
name VARCHAR2(30) CONSTRAINT nn_obj_views_source_name NOT NULL,
line NUMBER(10) CONSTRAINT nn_obj_views_source_line NOT NULL,
text VARCHAR2(2000),
owner VARCHAR2(30) CONSTRAINT nn_obj_views_source_owner NOT NULL,
name VARCHAR2(30) CONSTRAINT nn_obj_views_source_name NOT NULL,
line NUMBER(10,0) CONSTRAINT nn_obj_views_source_line NOT NULL,
text VARCHAR2(2000),
--
CONSTRAINT pk_obj_views_source
PRIMARY KEY (owner, name, line)
);
--
COMMENT ON TABLE obj_views_source IS '[CORE] User views source converted to lines';
COMMENT ON TABLE obj_views_source IS '[CORE] User views source converted to lines';
--
COMMENT ON COLUMN obj_views_source.owner IS 'View owner';
COMMENT ON COLUMN obj_views_source.name IS 'View name';

View File

@ -1,36 +1,32 @@
--DROP TABLE roles PURGE;
CREATE TABLE roles (
app_id NUMBER(4) CONSTRAINT nn_roles_app_id NOT NULL,
role_id VARCHAR2(30) CONSTRAINT nn_roles_role_id NOT NULL,
role_name VARCHAR2(64),
role_group VARCHAR2(64),
app_id NUMBER(4,0) CONSTRAINT nn_roles_app_id NOT NULL,
role_id VARCHAR2(30) CONSTRAINT nn_roles_role_id NOT NULL,
role_name VARCHAR2(64),
role_group VARCHAR2(64),
description_ VARCHAR2(1000),
is_active CHAR(1),
order# NUMBER(4,0),
updated_by VARCHAR2(30),
updated_at DATE,
--
description_ VARCHAR2(1000),
is_active CHAR(1),
order# NUMBER(4),
--
updated_by VARCHAR2(30),
updated_at DATE,
CONSTRAINT ch_roles_is_active
CHECK (is_active = 'Y' OR is_active IS NULL),
--
CONSTRAINT pk_roles
PRIMARY KEY (app_id, role_id),
PRIMARY KEY (app_id, role_id)
--
CONSTRAINT fk_roles_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
--
CONSTRAINT ch_roles_is_active
CHECK (is_active = 'Y' OR is_active IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
REFERENCES apps (app_id)
);
--
COMMENT ON TABLE roles IS '[CORE] List of roles';
COMMENT ON TABLE roles IS '[CORE] List of roles';
--
COMMENT ON COLUMN roles.app_id IS 'Application ID';
COMMENT ON COLUMN roles.role_id IS 'Role ID';
COMMENT ON COLUMN roles.role_name IS 'Role name';
COMMENT ON COLUMN roles.role_group IS 'Role group just for grouping set in APEX';
COMMENT ON COLUMN roles.description_ IS 'Description';
COMMENT ON COLUMN roles.is_active IS 'Flag to disable role';
COMMENT ON COLUMN roles.order# IS 'Roles order in any form of list/report';
COMMENT ON COLUMN roles.app_id IS 'Application ID';
COMMENT ON COLUMN roles.role_id IS 'Role ID';
COMMENT ON COLUMN roles.role_name IS 'Role name';
COMMENT ON COLUMN roles.role_group IS 'Role group just for grouping set in APEX';
COMMENT ON COLUMN roles.description_ IS 'Description';
COMMENT ON COLUMN roles.is_active IS 'Flag to disable role';
COMMENT ON COLUMN roles.order# IS 'Roles order in any form of list/report';

View File

@ -0,0 +1,19 @@
CREATE TABLE roles_e$ (
ora_err_number$ NUMBER,
ora_err_mesg$ VARCHAR2(2000),
ora_err_rowid$ UROWID(4000),
ora_err_optyp$ VARCHAR2(2),
ora_err_tag$ VARCHAR2(2000),
app_id VARCHAR2(4000),
role_id VARCHAR2(32767),
role_name VARCHAR2(32767),
role_group VARCHAR2(32767),
description_ VARCHAR2(32767),
is_active VARCHAR2(32767),
order# VARCHAR2(4000),
updated_by VARCHAR2(32767),
updated_at VARCHAR2(4000)
);
--
COMMENT ON TABLE roles_e$ IS 'DML Error Logging table for "CORE"."ROLES"';

View File

@ -1,14 +1,12 @@
--DROP TABLE sessions PURGE;
CREATE TABLE sessions (
app_id NUMBER(4) CONSTRAINT nn_sessions_app_id NOT NULL,
session_id INTEGER CONSTRAINT nn_sessions_session_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_sessions_user_id NOT NULL,
--
created_at DATE CONSTRAINT nn_sessions_created_at NOT NULL,
updated_at DATE CONSTRAINT nn_sessions_updated_at NOT NULL,
app_id NUMBER(4,0) CONSTRAINT nn_sessions_app_id NOT NULL,
session_id INTEGER CONSTRAINT nn_sessions_session_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_sessions_user_id NOT NULL,
created_at DATE CONSTRAINT nn_sessions_created_at NOT NULL,
updated_at DATE CONSTRAINT nn_sessions_updated_at NOT NULL,
--
CONSTRAINT pk_sessions
PRIMARY KEY (app_id, session_id),
PRIMARY KEY (app_id, session_id)
--
CONSTRAINT fk_sessions_app_id
FOREIGN KEY (app_id)
@ -18,14 +16,13 @@ CREATE TABLE sessions (
FOREIGN KEY (user_id)
REFERENCES users (user_id)
DEFERRABLE INITIALLY DEFERRED
)
STORAGE (BUFFER_POOL KEEP);
);
--
COMMENT ON TABLE sessions IS '[CORE] List of sessions';
COMMENT ON TABLE sessions IS '[CORE] List of sessions';
--
COMMENT ON COLUMN sessions.app_id IS 'APEX application ID';
COMMENT ON COLUMN sessions.session_id IS 'Session ID generated by APEX, used also in LOGS';
COMMENT ON COLUMN sessions.user_id IS 'User ID';
COMMENT ON COLUMN sessions.created_at IS 'Time of creation';
COMMENT ON COLUMN sessions.updated_at IS 'Time of last update';
COMMENT ON COLUMN sessions.app_id IS 'APEX application ID';
COMMENT ON COLUMN sessions.session_id IS 'Session ID generated by APEX, used also in LOGS';
COMMENT ON COLUMN sessions.user_id IS 'User ID';
COMMENT ON COLUMN sessions.created_at IS 'Time of creation';
COMMENT ON COLUMN sessions.updated_at IS 'Time of last update';

View File

@ -1,28 +1,25 @@
--DROP TABLE setting_contexts PURGE;
CREATE TABLE setting_contexts (
app_id NUMBER(4) CONSTRAINT nn_setting_contexts_app_id NOT NULL,
context_id VARCHAR2(64) CONSTRAINT nn_setting_contexts_name NOT NULL,
context_name VARCHAR2(64),
description_ VARCHAR2(1000),
order# NUMBER(4),
--
updated_by VARCHAR2(30),
updated_at DATE,
app_id NUMBER(4,0) CONSTRAINT nn_setting_contexts_app_id NOT NULL,
context_id VARCHAR2(64) CONSTRAINT nn_setting_contexts_name NOT NULL,
context_name VARCHAR2(64),
description_ VARCHAR2(1000),
order# NUMBER(4,0),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT uq_setting_contexts
UNIQUE (app_id, context_id),
UNIQUE (app_id, context_id)
--
CONSTRAINT fk_setting_contexts_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id)
)
STORAGE (BUFFER_POOL KEEP);
);
--
COMMENT ON TABLE setting_contexts IS '[CORE] List of contexts for settings overrides';
COMMENT ON TABLE setting_contexts IS '[CORE] List of contexts for settings overrides';
--
COMMENT ON COLUMN setting_contexts.app_id IS 'Application ID';
COMMENT ON COLUMN setting_contexts.context_id IS 'To allow multiple values depending on context value';
COMMENT ON COLUMN setting_contexts.context_name IS 'Friendly name';
COMMENT ON COLUMN setting_contexts.description_ IS 'Description';
COMMENT ON COLUMN setting_contexts.order# IS 'Order for sorting purposes';
COMMENT ON COLUMN setting_contexts.app_id IS 'Application ID';
COMMENT ON COLUMN setting_contexts.context_id IS 'To allow multiple values depending on context value';
COMMENT ON COLUMN setting_contexts.context_name IS 'Friendly name';
COMMENT ON COLUMN setting_contexts.description_ IS 'Description';
COMMENT ON COLUMN setting_contexts.order# IS 'Order for sorting purposes';

View File

@ -1,27 +1,15 @@
--DROP TABLE settings PURGE;
CREATE TABLE settings (
app_id NUMBER(4) CONSTRAINT nn_settings_app_id NOT NULL,
setting_name VARCHAR2(30) CONSTRAINT nn_settings_id NOT NULL,
--
setting_value VARCHAR2(256),
setting_context VARCHAR2(64),
setting_group VARCHAR2(64),
--
is_numeric CHAR(1),
is_date CHAR(1),
is_private CHAR(1),
--
description_ VARCHAR2(1000),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT uq_settings
UNIQUE (app_id, setting_name, setting_context),
--
CONSTRAINT fk_settings_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
app_id NUMBER(4,0) CONSTRAINT nn_settings_app_id NOT NULL,
setting_name VARCHAR2(30) CONSTRAINT nn_settings_id NOT NULL,
setting_value VARCHAR2(256),
setting_context VARCHAR2(64),
setting_group VARCHAR2(64),
is_numeric CHAR(1),
is_date CHAR(1),
is_private CHAR(1),
description_ VARCHAR2(1000),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT ch_settings_is_active
CHECK ((is_numeric = 'Y' AND is_date IS NULL) OR is_numeric IS NULL),
@ -29,12 +17,18 @@ CREATE TABLE settings (
CONSTRAINT ch_settings_is_date
CHECK ((is_date = 'Y' AND is_numeric IS NULL) OR is_date IS NULL),
--
CONSTRAINT uq_settings
UNIQUE (app_id, setting_name, setting_context)
--
CONSTRAINT ch_settings_is_private
CHECK (is_private = 'Y' OR is_private IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
CHECK (is_private = 'Y' OR is_private IS NULL),
--
CONSTRAINT fk_settings_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id)
);
--
COMMENT ON TABLE settings IS '[CORE] List of settings shared through whole app';
COMMENT ON TABLE settings IS '[CORE] List of settings shared through whole app';
--
COMMENT ON COLUMN settings.app_id IS 'Application ID';
COMMENT ON COLUMN settings.setting_name IS 'Setting ID';

View File

@ -1,39 +1,34 @@
--DROP TABLE translated_items PURGE;
CREATE TABLE translated_items (
app_id NUMBER(4) CONSTRAINT nn_translated_items_app_id NOT NULL,
page_id NUMBER(6) CONSTRAINT nn_translated_items_page_id NOT NULL,
item_name VARCHAR2(64) CONSTRAINT nn_translated_items_name NOT NULL,
--
value_en VARCHAR2(2000),
value_cz VARCHAR2(2000),
value_sk VARCHAR2(2000),
value_pl VARCHAR2(2000),
value_hu VARCHAR2(2000),
--
updated_by VARCHAR2(30),
updated_at DATE,
app_id NUMBER(4,0) CONSTRAINT nn_translated_items_app_id NOT NULL,
page_id NUMBER(6,0) CONSTRAINT nn_translated_items_page_id NOT NULL,
item_name VARCHAR2(64) CONSTRAINT nn_translated_items_name NOT NULL,
value_en VARCHAR2(2000),
value_cz VARCHAR2(2000),
value_sk VARCHAR2(2000),
value_pl VARCHAR2(2000),
value_hu VARCHAR2(2000),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_translated_items
PRIMARY KEY (app_id, page_id, item_name),
PRIMARY KEY (app_id, page_id, item_name)
--
CONSTRAINT ch_translated_items_name
CHECK (REGEXP_LIKE(item_name, '^([A-Z][A-Z0-9-_]*)$')),
--
CONSTRAINT fk_translated_items_page_id
FOREIGN KEY (app_id, page_id)
REFERENCES navigation (app_id, page_id),
--
CONSTRAINT ch_translated_items_name
CHECK (REGEXP_LIKE(item_name, '^([A-Z][A-Z0-9-_]*)$'))
)
STORAGE (BUFFER_POOL KEEP);
REFERENCES navigation (app_id, page_id)
);
--
COMMENT ON TABLE translated_items IS '[CORE] Translations for page/app items';
COMMENT ON TABLE translated_items IS '[CORE] Translations for page/app items';
--
COMMENT ON COLUMN translated_items.app_id IS 'APEX application ID';
COMMENT ON COLUMN translated_items.page_id IS 'APEX page ID; 0 for page zero or application item';
COMMENT ON COLUMN translated_items.item_name IS 'Item name (preferrably) to translate';
--
COMMENT ON COLUMN translated_items.value_en IS 'Translated value';
COMMENT ON COLUMN translated_items.value_cz IS 'Translated value';
COMMENT ON COLUMN translated_items.value_sk IS 'Translated value';
COMMENT ON COLUMN translated_items.value_pl IS 'Translated value';
COMMENT ON COLUMN translated_items.value_hu IS 'Translated value';
COMMENT ON COLUMN translated_items.app_id IS 'APEX application ID';
COMMENT ON COLUMN translated_items.page_id IS 'APEX page ID; 0 for page zero or application item';
COMMENT ON COLUMN translated_items.item_name IS 'Item name (preferrably) to translate';
COMMENT ON COLUMN translated_items.value_en IS 'Translated value';
COMMENT ON COLUMN translated_items.value_cz IS 'Translated value';
COMMENT ON COLUMN translated_items.value_sk IS 'Translated value';
COMMENT ON COLUMN translated_items.value_pl IS 'Translated value';
COMMENT ON COLUMN translated_items.value_hu IS 'Translated value';

View File

@ -1,30 +1,25 @@
--DROP TABLE translated_messages PURGE;
CREATE TABLE translated_messages (
app_id NUMBER(4) CONSTRAINT nn_translated_messages_app_id NOT NULL,
message VARCHAR2(256) CONSTRAINT nn_translated_messages_message NOT NULL,
--
value_en VARCHAR2(2000),
value_cz VARCHAR2(2000),
value_sk VARCHAR2(2000),
value_pl VARCHAR2(2000),
value_hu VARCHAR2(2000),
--
updated_by VARCHAR2(30),
updated_at DATE,
app_id NUMBER(4,0) CONSTRAINT nn_translated_messages_app_id NOT NULL,
message VARCHAR2(256) CONSTRAINT nn_translated_messages_message NOT NULL,
value_en VARCHAR2(2000),
value_cz VARCHAR2(2000),
value_sk VARCHAR2(2000),
value_pl VARCHAR2(2000),
value_hu VARCHAR2(2000),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_translated_messages
PRIMARY KEY (app_id, message)
)
STORAGE (BUFFER_POOL KEEP);
);
--
COMMENT ON TABLE translated_messages IS '[CORE] List of translated messages/notifications';
COMMENT ON TABLE translated_messages IS '[CORE] List of translated messages/notifications';
--
COMMENT ON COLUMN translated_messages.app_id IS 'APEX application ID';
COMMENT ON COLUMN translated_messages.message IS 'Message to translate';
--
COMMENT ON COLUMN translated_messages.value_en IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_cz IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_sk IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_pl IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_hu IS 'Translated value';
COMMENT ON COLUMN translated_messages.app_id IS 'APEX application ID';
COMMENT ON COLUMN translated_messages.message IS 'Message to translate';
COMMENT ON COLUMN translated_messages.value_en IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_cz IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_sk IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_pl IS 'Translated value';
COMMENT ON COLUMN translated_messages.value_hu IS 'Translated value';

View File

@ -1,18 +1,16 @@
--DROP TABLE user_messages PURGE;
CREATE TABLE user_messages (
app_id NUMBER(4) CONSTRAINT nn_user_messages_app_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_user_messages_user_id NOT NULL,
message_id INTEGER CONSTRAINT nn_user_messages_message_id NOT NULL, -- log_id
message_type VARCHAR2(16),
message_payload VARCHAR2(2000),
session_id INTEGER,
--
created_by VARCHAR2(30),
created_at DATE,
delivered_at DATE,
app_id NUMBER(4,0) CONSTRAINT nn_user_messages_app_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_user_messages_user_id NOT NULL,
message_id INTEGER CONSTRAINT nn_user_messages_message_id NOT NULL,
message_type VARCHAR2(16),
message_payload VARCHAR2(2000),
session_id INTEGER,
created_by VARCHAR2(30),
created_at DATE,
delivered_at DATE,
--
CONSTRAINT pk_user_messages
PRIMARY KEY (app_id, user_id, message_id),
PRIMARY KEY (app_id, user_id, message_id)
--
CONSTRAINT fk_user_messages_app_id
FOREIGN KEY (app_id)
@ -22,10 +20,9 @@ CREATE TABLE user_messages (
FOREIGN KEY (user_id)
REFERENCES users (user_id)
DEFERRABLE INITIALLY DEFERRED
)
STORAGE (BUFFER_POOL KEEP);
);
--
COMMENT ON TABLE user_messages IS '[CORE] Messages for users';
COMMENT ON TABLE user_messages IS '[CORE] Messages for users';
--
COMMENT ON COLUMN user_messages.app_id IS 'APEX application ID';
COMMENT ON COLUMN user_messages.user_id IS 'User ID from USERS table';

View File

@ -1,36 +1,31 @@
--DROP TABLE user_roles PURGE;
CREATE TABLE user_roles (
app_id NUMBER(4) CONSTRAINT nn_user_roles_app_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_user_roles_user_id NOT NULL,
role_id VARCHAR2(30) CONSTRAINT nn_user_roles_role_id NOT NULL,
--
updated_by VARCHAR2(30),
updated_at DATE,
app_id NUMBER(4,0) CONSTRAINT nn_user_roles_app_id NOT NULL,
user_id VARCHAR2(30) CONSTRAINT nn_user_roles_user_id NOT NULL,
role_id VARCHAR2(30) CONSTRAINT nn_user_roles_role_id NOT NULL,
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_user_roles
PRIMARY KEY (app_id, user_id, role_id),
PRIMARY KEY (app_id, user_id, role_id)
--
CONSTRAINT fk_user_roles_app_id
CONSTRAINT fk_users_roles_app_id
FOREIGN KEY (app_id)
REFERENCES apps (app_id),
--
CONSTRAINT fk_user_roles_user_id
FOREIGN KEY (user_id)
REFERENCES users (user_id)
DEFERRABLE INITIALLY DEFERRED,
--
CONSTRAINT fk_user_roles_role_id
CONSTRAINT fk_users_roles_role_id
FOREIGN KEY (app_id, role_id)
REFERENCES roles (app_id, role_id)
DEFERRABLE INITIALLY DEFERRED
)
STORAGE (BUFFER_POOL KEEP);
DEFERRABLE INITIALLY DEFERRED,
--
CONSTRAINT fk_users_roles_user_id
FOREIGN KEY (user_id)
REFERENCES users (user_id)
DEFERRABLE INITIALLY DEFERRED DISABLE
);
--
ALTER TABLE user_roles MODIFY CONSTRAINT fk_user_roles_user_id DISABLE; -- to assign roles before user is created
COMMENT ON TABLE user_roles IS '[CORE] List of roles assigned to users';
--
COMMENT ON TABLE user_roles IS '[CORE] List of roles assigned to users';
--
COMMENT ON COLUMN user_roles.app_id IS 'APEX application ID';
COMMENT ON COLUMN user_roles.user_id IS 'User ID from USERS table';
COMMENT ON COLUMN user_roles.role_id IS 'Role ID from ROLES table';
COMMENT ON COLUMN user_roles.app_id IS 'APEX application ID';
COMMENT ON COLUMN user_roles.user_id IS 'User ID from USERS table';
COMMENT ON COLUMN user_roles.role_id IS 'Role ID from ROLES table';

View File

@ -1,35 +1,27 @@
/*
DROP TABLE sessions CASCADE CONSTRAINTS PURGE;
DROP TABLE user_roles CASCADE CONSTRAINTS PURGE;
DROP TABLE users CASCADE CONSTRAINTS PURGE;
*/
CREATE TABLE users (
user_id VARCHAR2(30) CONSTRAINT nn_users_user_id NOT NULL,
user_login VARCHAR2(128) CONSTRAINT nn_users_login NOT NULL,
user_name VARCHAR2(64),
--
lang_id VARCHAR2(5),
is_active CHAR(1),
--
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT pk_users
PRIMARY KEY (user_id),
--
CONSTRAINT uq_users_user_login
UNIQUE (user_login),
user_id VARCHAR2(30) CONSTRAINT nn_users_user_id NOT NULL,
user_login VARCHAR2(128) CONSTRAINT nn_users_login NOT NULL,
user_name VARCHAR2(64),
lang_id VARCHAR2(5),
is_active CHAR(1),
updated_by VARCHAR2(30),
updated_at DATE,
--
CONSTRAINT ch_users_is_active
CHECK (is_active = 'Y' OR is_active IS NULL)
)
STORAGE (BUFFER_POOL KEEP);
CHECK (is_active = 'Y' OR is_active IS NULL),
--
CONSTRAINT pk_users
PRIMARY KEY (user_id)
--
CONSTRAINT uq_users_user_login
UNIQUE (user_login)
);
--
COMMENT ON TABLE users IS '[CORE] List of users';
COMMENT ON TABLE users IS '[CORE] List of users';
--
COMMENT ON COLUMN users.user_id IS 'User ID used internally (short)';
COMMENT ON COLUMN users.user_login IS 'User login used for login into the app';
COMMENT ON COLUMN users.user_name IS 'User name visible in the app';
COMMENT ON COLUMN users.lang_id IS 'Preferred language';
COMMENT ON COLUMN users.is_active IS 'Flag to disable user without changing roles';
COMMENT ON COLUMN users.user_id IS 'User ID used internally (short)';
COMMENT ON COLUMN users.user_login IS 'User login used for login into the app';
COMMENT ON COLUMN users.user_name IS 'User name visible in the app';
COMMENT ON COLUMN users.lang_id IS 'Preferred language';
COMMENT ON COLUMN users.is_active IS 'Flag to disable user without changing roles';