blob: 5451b155b36efafd2cdc550500edd8e548835d6c [file] [log] [blame]
@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