@startuml erd title Apache Superset ERD !theme blueprint ' avoid problems with angled crows feet skinparam linetype ortho skinparam classBorderColor #grey skinparam classBorderColor<> #white skinparam classBorderThickness<> 1 skinparam classLineStyle<> Dashed skinparam ClassBackgroundColor<> #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