Generates a Mermaid
entity relationship diagram from a DuckDB connection by querying
information_schema.columns. Unlike dm::dm_draw(), this handles
GEOMETRY columns without errors, so spatial tables like site, grid,
casts, and segment are included in the diagram.
cc_erd(
con,
tables = NULL,
exclude = NULL,
rels_path = NULL,
rels = NULL,
colors = NULL,
layout = "elk",
view_type = "all"
)DBI connection to a DuckDB database
Character vector of table names to include. If NULL (default), all tables in the connection are included.
Character vector of table names to exclude (default: NULL).
Applied after tables.
Path to a relationships.json file for primary key and
foreign key definitions. If NULL (default), the diagram shows table
structures without relationship lines. Ignored when rels is provided.
A list with primary_keys (named list: table → column) and
foreign_keys (list of lists with table, column, ref_table,
ref_column). Alternative to rels_path for passing relationships
inline. Takes precedence over rels_path.
Named list mapping color names or hex codes to character
vectors of table names. Emitted as Mermaid classDef/class
directives with a darker auto-generated stroke.
Example: list(lightblue = c("cruise", "ship")).
Layout engine: "elk" (default) or "dagre".
What columns to show: "all" (default), "keys_only"
(PK/FK columns only), or "title_only" (table names, no columns).
An object of class "cc_erd" (inherits "character").
Printing outputs the Mermaid code; in Quarto/RMarkdown it auto-renders
as a Mermaid diagram (respects mermaid-format in _quarto.yml).
if (FALSE) { # \dontrun{
con <- cc_get_db()
# basic ERD with all tables (including geometry tables)
cc_erd(con)
# with relationships from frozen release
cc_erd(con, rels_path = "data/releases/v2026.03.25/relationships.json")
# color-coded groups matching release_database.qmd palette
cc_erd(con,
rels_path = "relationships.json",
colors = list(
lightblue = c("cruise", "ship", "site", "tow", "net"),
lightyellow = c("ichthyo", "species", "lookup", "taxon", "taxa_rank"),
lightgreen = c("grid", "segment"),
pink = c("casts", "bottle", "bottle_measurement",
"cast_condition", "measurement_type"),
lavender = c("ctd_cast", "ctd_measurement", "ctd_summary"),
lightsalmon = c("dic_sample", "dic_measurement",
"dic_measurement_summary"),
white = c("dataset")))
# inline relationships (alternative to rels_path)
cc_erd(con, rels = list(
primary_keys = list(cruise = "cruise_key", ship = "ship_key"),
foreign_keys = list(
list(table = "cruise", column = "ship_key",
ref_table = "ship", ref_column = "ship_key"))))
# compact: show only key columns
cc_erd(con, rels_path = "relationships.json", view_type = "keys_only")
} # }