mirror of
https://github.com/apache/superset.git
synced 2024-09-17 19:19:38 -04:00
677 lines
20 KiB
Plaintext
677 lines
20 KiB
Plaintext
|
|
@startuml erd
|
|
|
|
title Apache Superset ERD
|
|
|
|
!theme blueprint
|
|
|
|
' avoid problems with angled crows feet
|
|
|
|
skinparam linetype ortho
|
|
skinparam classBorderColor #grey
|
|
|
|
skinparam classBorderColor<<new>> #white
|
|
skinparam classBorderThickness<<new>> 1
|
|
skinparam classLineStyle<<new>> Dashed
|
|
skinparam ClassBackgroundColor<<new>> #204143
|
|
|
|
' Models
|
|
rectangle "Data Assets" #black {
|
|
entity "SqlMetric (sql_metrics)" as sql_metrics {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
metric_name: VARCHAR(255)
|
|
verbose_name: VARCHAR(1024)
|
|
metric_type: VARCHAR(32)
|
|
description: TEXT
|
|
d3format: VARCHAR(128)
|
|
currency: VARCHAR(128)
|
|
warning_text: TEXT
|
|
table_id: INTEGER
|
|
expression: TEXT
|
|
extra: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "DatabaseUserOAuth2Tokens (database_user_oauth2_tokens)" as database_user_oauth2_tokens {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
user_id: INTEGER
|
|
database_id: INTEGER
|
|
access_token: BLOB
|
|
access_token_expiration: DATETIME
|
|
refresh_token: BLOB
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Table (sl_tables)" as sl_tables {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
database_id: INTEGER
|
|
catalog: TEXT
|
|
schema: TEXT
|
|
name: TEXT
|
|
is_managed_externally: BOOLEAN
|
|
external_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Database (dbs)" as dbs {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
verbose_name: VARCHAR(250)
|
|
database_name: VARCHAR(250)
|
|
sqlalchemy_uri: VARCHAR(1024)
|
|
password: BLOB
|
|
cache_timeout: INTEGER
|
|
select_as_create_table_as: BOOLEAN
|
|
expose_in_sqllab: BOOLEAN
|
|
configuration_method: VARCHAR(255)
|
|
allow_run_async: BOOLEAN
|
|
allow_file_upload: BOOLEAN
|
|
allow_ctas: BOOLEAN
|
|
allow_cvas: BOOLEAN
|
|
allow_dml: BOOLEAN
|
|
force_ctas_schema: VARCHAR(250)
|
|
extra: TEXT
|
|
encrypted_extra: BLOB
|
|
impersonate_user: BOOLEAN
|
|
server_cert: BLOB
|
|
is_managed_externally: BOOLEAN
|
|
external_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Dataset (sl_datasets)" as sl_datasets {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
database_id: INTEGER
|
|
is_physical: BOOLEAN
|
|
is_managed_externally: BOOLEAN
|
|
name: TEXT
|
|
expression: TEXT
|
|
external_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "SqlaTable (tables)" as tables {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
description: TEXT
|
|
default_endpoint: TEXT
|
|
is_featured: BOOLEAN
|
|
filter_select_enabled: BOOLEAN
|
|
offset: INTEGER
|
|
cache_timeout: INTEGER
|
|
params: VARCHAR(1000)
|
|
perm: VARCHAR(1000)
|
|
schema_perm: VARCHAR(1000)
|
|
is_managed_externally: BOOLEAN
|
|
external_url: TEXT
|
|
table_name: VARCHAR(250)
|
|
main_dttm_col: VARCHAR(250)
|
|
database_id: INTEGER
|
|
fetch_values_predicate: TEXT
|
|
schema: VARCHAR(255)
|
|
sql: TEXT
|
|
is_sqllab_view: BOOLEAN
|
|
template_params: TEXT
|
|
extra: TEXT
|
|
normalize_columns: BOOLEAN
|
|
always_filter_main_dttm: BOOLEAN
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "TableColumn (table_columns)" as table_columns {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
column_name: VARCHAR(255)
|
|
verbose_name: VARCHAR(1024)
|
|
is_active: BOOLEAN
|
|
type: TEXT
|
|
advanced_data_type: VARCHAR(255)
|
|
groupby: BOOLEAN
|
|
filterable: BOOLEAN
|
|
description: TEXT
|
|
table_id: INTEGER
|
|
is_dttm: BOOLEAN
|
|
expression: TEXT
|
|
python_date_format: VARCHAR(255)
|
|
extra: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Column (sl_columns)" as sl_columns {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
is_additive: BOOLEAN
|
|
is_aggregation: BOOLEAN
|
|
is_filterable: BOOLEAN
|
|
is_dimensional: BOOLEAN
|
|
is_increase_desired: BOOLEAN
|
|
is_managed_externally: BOOLEAN
|
|
is_partition: BOOLEAN
|
|
is_physical: BOOLEAN
|
|
is_spatial: BOOLEAN
|
|
is_temporal: BOOLEAN
|
|
name: TEXT
|
|
type: TEXT
|
|
advanced_data_type: TEXT
|
|
expression: TEXT
|
|
unit: TEXT
|
|
description: TEXT
|
|
warning_text: TEXT
|
|
external_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "RowLevelSecurityFilter (row_level_security_filters)" as row_level_security_filters {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
name: VARCHAR(255)
|
|
description: TEXT
|
|
filter_type: VARCHAR(7)
|
|
group_key: VARCHAR(255)
|
|
clause: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
}
|
|
rectangle "System" #black {
|
|
entity "KeyValueEntry (key_value)" as key_value {
|
|
uuid: BINARY(16)
|
|
id: INTEGER
|
|
resource: VARCHAR(32)
|
|
value: BLOB
|
|
created_on: DATETIME
|
|
created_by_fk: INTEGER
|
|
changed_on: DATETIME
|
|
expires_on: DATETIME
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "SSHTunnel (ssh_tunnels)" as ssh_tunnels {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
database_id: INTEGER
|
|
server_address: TEXT
|
|
server_port: INTEGER
|
|
username: BLOB
|
|
password: BLOB
|
|
private_key: BLOB
|
|
private_key_password: BLOB
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "KeyValue (keyvalue)" as keyvalue {
|
|
id: INTEGER
|
|
value: TEXT
|
|
}
|
|
entity "CacheKey (cache_keys)" as cache_keys {
|
|
id: INTEGER
|
|
cache_key: VARCHAR(256)
|
|
cache_timeout: INTEGER
|
|
datasource_uid: VARCHAR(64)
|
|
created_on: DATETIME
|
|
}
|
|
entity "Log (logs)" as logs {
|
|
id: INTEGER
|
|
action: VARCHAR(512)
|
|
user_id: INTEGER
|
|
dashboard_id: INTEGER
|
|
slice_id: INTEGER
|
|
json: TEXT
|
|
dttm: DATETIME
|
|
duration_ms: INTEGER
|
|
referrer: VARCHAR(1024)
|
|
}
|
|
}
|
|
rectangle "SQL Lab" #black {
|
|
entity "SavedQuery (saved_query)" as saved_query {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
user_id: INTEGER
|
|
db_id: INTEGER
|
|
schema: VARCHAR(128)
|
|
label: VARCHAR(256)
|
|
description: TEXT
|
|
sql: TEXT
|
|
template_parameters: TEXT
|
|
rows: INTEGER
|
|
last_run: DATETIME
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "TableSchema (table_schema)" as table_schema {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
tab_state_id: INTEGER
|
|
database_id: INTEGER
|
|
schema: VARCHAR(256)
|
|
table: VARCHAR(256)
|
|
description: TEXT
|
|
expanded: BOOLEAN
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Query (query)" as query {
|
|
tracking_url: TEXT
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
client_id: VARCHAR(11)
|
|
database_id: INTEGER
|
|
tmp_table_name: VARCHAR(256)
|
|
tmp_schema_name: VARCHAR(256)
|
|
user_id: INTEGER
|
|
status: VARCHAR(16)
|
|
tab_name: VARCHAR(256)
|
|
sql_editor_id: VARCHAR(256)
|
|
schema: VARCHAR(256)
|
|
sql: TEXT
|
|
select_sql: TEXT
|
|
executed_sql: TEXT
|
|
limit: INTEGER
|
|
limiting_factor: VARCHAR(18)
|
|
select_as_cta: BOOLEAN
|
|
select_as_cta_used: BOOLEAN
|
|
ctas_method: VARCHAR(16)
|
|
progress: INTEGER
|
|
rows: INTEGER
|
|
error_message: TEXT
|
|
results_key: VARCHAR(64)
|
|
start_time: NUMERIC(20, 6)
|
|
start_running_time: NUMERIC(20, 6)
|
|
end_time: NUMERIC(20, 6)
|
|
end_result_backend_time: NUMERIC(20, 6)
|
|
changed_on: DATETIME
|
|
}
|
|
entity "TabState (tab_state)" as tab_state {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
user_id: INTEGER
|
|
label: VARCHAR(256)
|
|
active: BOOLEAN
|
|
database_id: INTEGER
|
|
schema: VARCHAR(256)
|
|
sql: TEXT
|
|
query_limit: INTEGER
|
|
latest_query_id: INTEGER
|
|
autorun: BOOLEAN
|
|
template_params: TEXT
|
|
hide_left_bar: BOOLEAN
|
|
saved_query_id: INTEGER
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
}
|
|
rectangle "Core" #black {
|
|
entity "FavStar (favstar)" as favstar {
|
|
id: INTEGER
|
|
user_id: INTEGER
|
|
class_name: VARCHAR(50)
|
|
obj_id: INTEGER
|
|
dttm: DATETIME
|
|
}
|
|
entity "Dashboard (dashboards)" as dashboards {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
dashboard_title: VARCHAR(500)
|
|
position_json: TEXT
|
|
description: TEXT
|
|
css: TEXT
|
|
certified_by: TEXT
|
|
certification_details: TEXT
|
|
json_metadata: TEXT
|
|
slug: VARCHAR(255)
|
|
published: BOOLEAN
|
|
is_managed_externally: BOOLEAN
|
|
external_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Annotation (annotation)" as annotation {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
start_dttm: DATETIME
|
|
end_dttm: DATETIME
|
|
layer_id: INTEGER
|
|
short_descr: VARCHAR(500)
|
|
long_descr: TEXT
|
|
json_metadata: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "EmbeddedDashboard (embedded_dashboards)" as embedded_dashboards {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
uuid: BINARY(16)
|
|
allow_domain_list: TEXT
|
|
dashboard_id: INTEGER
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Slice (slices)" as slices {
|
|
uuid: BINARY(16)
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
slice_name: VARCHAR(250)
|
|
datasource_id: INTEGER
|
|
datasource_type: VARCHAR(200)
|
|
datasource_name: VARCHAR(2000)
|
|
viz_type: VARCHAR(250)
|
|
params: TEXT
|
|
query_context: TEXT
|
|
description: TEXT
|
|
cache_timeout: INTEGER
|
|
perm: VARCHAR(1000)
|
|
schema_perm: VARCHAR(1000)
|
|
last_saved_at: DATETIME
|
|
last_saved_by_fk: INTEGER
|
|
certified_by: TEXT
|
|
certification_details: TEXT
|
|
is_managed_externally: BOOLEAN
|
|
external_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "TaggedObject (tagged_object)" as tagged_object {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
tag_id: INTEGER
|
|
object_id: INTEGER
|
|
object_type: VARCHAR(9)
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "AnnotationLayer (annotation_layer)" as annotation_layer {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
name: VARCHAR(250)
|
|
descr: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "DynamicPlugin (dynamic_plugin)" as dynamic_plugin {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
name: TEXT
|
|
key: TEXT
|
|
bundle_url: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "Tag (tag)" as tag {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
name: VARCHAR(250)
|
|
type: VARCHAR(12)
|
|
description: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "CssTemplate (css_templates)" as css_templates {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
template_name: VARCHAR(250)
|
|
css: TEXT
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "UserAttribute (user_attribute)" as user_attribute {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
user_id: INTEGER
|
|
welcome_dashboard_id: INTEGER
|
|
avatar_url: VARCHAR(100)
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
}
|
|
rectangle "Inherited from Flask App Builder (FAB)" #black {
|
|
entity "ViewMenu (ab_view_menu)" as ab_view_menu {
|
|
id: INTEGER
|
|
name: VARCHAR(250)
|
|
}
|
|
entity "Permission (ab_permission)" as ab_permission {
|
|
id: INTEGER
|
|
name: VARCHAR(100)
|
|
}
|
|
entity "User (ab_user)" as ab_user {
|
|
id: INTEGER
|
|
first_name: VARCHAR(64)
|
|
last_name: VARCHAR(64)
|
|
username: VARCHAR(64)
|
|
password: VARCHAR(256)
|
|
active: BOOLEAN
|
|
email: VARCHAR(320)
|
|
last_login: DATETIME
|
|
login_count: INTEGER
|
|
fail_login_count: INTEGER
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "RegisterUser (ab_register_user)" as ab_register_user {
|
|
id: INTEGER
|
|
first_name: VARCHAR(64)
|
|
last_name: VARCHAR(64)
|
|
username: VARCHAR(64)
|
|
password: VARCHAR(256)
|
|
email: VARCHAR(64)
|
|
registration_date: DATETIME
|
|
registration_hash: VARCHAR(256)
|
|
}
|
|
entity "PermissionView (ab_permission_view)" as ab_permission_view {
|
|
id: INTEGER
|
|
permission_id: INTEGER
|
|
view_menu_id: INTEGER
|
|
}
|
|
entity "Role (ab_role)" as ab_role {
|
|
id: INTEGER
|
|
name: VARCHAR(64)
|
|
}
|
|
}
|
|
rectangle "Alerts & Reports" #black {
|
|
entity "ReportRecipients (report_recipient)" as report_recipient {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
id: INTEGER
|
|
type: VARCHAR(50)
|
|
recipient_config_json: TEXT
|
|
report_schedule_id: INTEGER
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
entity "ReportExecutionLog (report_execution_log)" as report_execution_log {
|
|
id: INTEGER
|
|
uuid: BINARY(16)
|
|
scheduled_dttm: DATETIME
|
|
start_dttm: DATETIME
|
|
end_dttm: DATETIME
|
|
value: FLOAT
|
|
value_row_json: TEXT
|
|
state: VARCHAR(50)
|
|
error_message: TEXT
|
|
report_schedule_id: INTEGER
|
|
}
|
|
entity "ReportSchedule (report_schedule)" as report_schedule {
|
|
created_on: DATETIME
|
|
changed_on: DATETIME
|
|
extra_json: TEXT
|
|
id: INTEGER
|
|
type: VARCHAR(50)
|
|
name: VARCHAR(150)
|
|
description: TEXT
|
|
context_markdown: TEXT
|
|
active: BOOLEAN
|
|
crontab: VARCHAR(1000)
|
|
creation_method: VARCHAR(255)
|
|
timezone: VARCHAR(100)
|
|
report_format: VARCHAR(50)
|
|
sql: TEXT
|
|
chart_id: INTEGER
|
|
dashboard_id: INTEGER
|
|
database_id: INTEGER
|
|
last_eval_dttm: DATETIME
|
|
last_state: VARCHAR(50)
|
|
last_value: FLOAT
|
|
last_value_row_json: TEXT
|
|
validator_type: VARCHAR(100)
|
|
validator_config_json: TEXT
|
|
log_retention: INTEGER
|
|
grace_period: INTEGER
|
|
working_timeout: INTEGER
|
|
force_screenshot: BOOLEAN
|
|
custom_width: INTEGER
|
|
custom_height: INTEGER
|
|
created_by_fk: INTEGER
|
|
changed_by_fk: INTEGER
|
|
}
|
|
}
|
|
' Relationships
|
|
|
|
sql_metrics }|--|| tables
|
|
sql_metrics }|--|| ab_user
|
|
|
|
database_user_oauth2_tokens }|--|| ab_user
|
|
database_user_oauth2_tokens }|--|| dbs
|
|
|
|
sl_tables }|--|| dbs
|
|
sl_tables }|--|{ sl_columns
|
|
sl_tables }|--|| ab_user
|
|
sl_tables }|--|{ sl_datasets
|
|
|
|
dbs }|--|| ab_user
|
|
dbs ||--|{ tables
|
|
dbs ||--|{ sl_datasets
|
|
|
|
sl_datasets }|--|{ sl_columns
|
|
sl_datasets }|--|{ ab_user
|
|
|
|
tables ||--|{ table_columns
|
|
tables }|--|{ row_level_security_filters
|
|
|
|
table_columns }|--|| ab_user
|
|
|
|
sl_columns }|--|| ab_user
|
|
|
|
row_level_security_filters }|--|| ab_user
|
|
|
|
key_value }|--|| ab_user
|
|
|
|
ssh_tunnels }|--|| dbs
|
|
ssh_tunnels }|--|| ab_user
|
|
|
|
|
|
|
|
|
|
saved_query }|--|| ab_user
|
|
saved_query }|--|| dbs
|
|
saved_query }|--|{ tag
|
|
|
|
table_schema }|--|| dbs
|
|
table_schema }|--|| ab_user
|
|
table_schema }|--|| tab_state
|
|
|
|
query }|--|| dbs
|
|
query }|--|| ab_user
|
|
|
|
tab_state }|--|| dbs
|
|
tab_state }|--|| query
|
|
tab_state }|--|| saved_query
|
|
tab_state }|--|| ab_user
|
|
|
|
|
|
dashboards }|--|{ slices
|
|
dashboards }|--|{ ab_user
|
|
dashboards }|--|{ tag
|
|
dashboards }|--|{ ab_role
|
|
dashboards ||--|{ embedded_dashboards
|
|
dashboards ||--|{ report_schedule
|
|
|
|
annotation }|--|| annotation_layer
|
|
annotation }|--|| ab_user
|
|
|
|
embedded_dashboards }|--|| ab_user
|
|
|
|
slices }|--|| ab_user
|
|
slices }|--|{ tag
|
|
slices }|--|| tables
|
|
slices ||--|{ report_schedule
|
|
|
|
tagged_object }|--|| tag
|
|
tagged_object }|--|| ab_user
|
|
|
|
annotation_layer }|--|| ab_user
|
|
|
|
dynamic_plugin }|--|| ab_user
|
|
|
|
tag }|--|{ ab_user
|
|
|
|
css_templates }|--|| ab_user
|
|
|
|
user_attribute }|--|| dashboards
|
|
|
|
|
|
|
|
ab_user }|--|{ ab_role
|
|
ab_user }|--|| ab_user
|
|
ab_user ||--|{ logs
|
|
ab_user ||--|{ user_attribute
|
|
ab_user }|--|{ tables
|
|
|
|
|
|
ab_permission_view }|--|| ab_permission
|
|
ab_permission_view }|--|| ab_view_menu
|
|
ab_permission_view }|--|{ ab_role
|
|
|
|
ab_role }|--|{ row_level_security_filters
|
|
|
|
report_recipient }|--|| report_schedule
|
|
report_recipient }|--|| ab_user
|
|
|
|
report_execution_log }|--|| report_schedule
|
|
|
|
report_schedule }|--|| dbs
|
|
report_schedule }|--|{ ab_user
|
|
@enduml
|