BlastoDB is built around seven main collections: Datasets, Subtypes, Lab Protocols, Publications, Research Labs, People, and Blog, plus a standalone Announcements collection and a Biobank collection. Cross-collection links are stored as stable UUID keys — renaming an entry never breaks a link. Vocabulary lists (Datatypes, Sources, Data Origins, Detection Methods, Countries) provide controlled terms used in datasets and subtypes.
The Biobank also follows the UUID-key rule: each entry references a research lab by its key through affiliated_lab, and the entry's lab name and country are derived from that lab at build time.
Dependency Graph
erDiagram
DATASET }o--o{ SUBTYPE : "subtypes[ ]"
DATASET }o--o{ PUBLICATION : "related_publications[ ]"
DATASET }o--o{ LAB_PROTOCOL : "lab_protocols[ ]"
LAB_PROTOCOL }o--o{ PUBLICATION : "related_publications[ ]"
DATASET }o--o{ DATATYPE : "datatypes[ ]"
DATASET }o--o{ SOURCE : "sources[ ]"
DATASET }o--o{ DATA_ORIGIN : "data_origins[ ]"
DATASET }o--o{ DETECTION_METHOD : "detection_methods[ ]"
DATASET }o--o{ COUNTRY : "countries[ ]"
SUBTYPE }o--o{ SOURCE : "sources[ ]"
BLOG }o--o{ PUBLICATION : "related_publications[ ]"
BLOG }o--o{ SUBTYPE : "related_subtypes[ ]"
BLOG }o--o{ DATASET : "related_datasets[ ]"
BIOBANK }o--|| RESEARCH_LAB : "affiliated_lab"
DATASET {
uuid key
string title
string link_to_source
string publication_date
string strains
}
BLOG {
string title
string publication_date
string author
markdown body
}
SUBTYPE {
uuid key
string name
url reference_genome_link
url ssu_rrna_link
}
PUBLICATION {
uuid key
string title
string authors
string date
string publication_name
string doi
url url
}
LAB_PROTOCOL {
uuid key
string title
}
RESEARCH_LAB {
uuid key
string lab_name
string contact_name
string contact_mail
string institution_name
string country
}
BIOBANK {
uuid key
string title
string tags
string contact_person_name
string contact_person_email
string affiliated_lab
}
PERSON {
string name
string mail
string affiliation
string role
url github
}
ANNOUNCEMENT {
string title
date publication_date
date valid_until
markdown body
}
DATATYPE {
string value
}
SOURCE {
string value
}
DATA_ORIGIN {
string value
}
DETECTION_METHOD {
string value
}
COUNTRY {
string value
}
Cross-linked Collections
These collections reference each other using stable key fields (hidden UUID, auto-generated by the CMS). A link is never broken by renaming an entry.
| Collection | Key type | Linked from |
|---|---|---|
| Subtypes | UUID (hidden) | Datasets → subtypes[], Blog → related_subtypes[] |
| Datasets | UUID (hidden) | Blog → related_datasets[] |
| Lab Protocols | UUID (hidden) | Datasets → lab_protocols[] |
| Publications | UUID (hidden) | Datasets → related_publications[], Lab Protocols → related_publications[], Blog → related_publications[] |
Blog articles link to publications, subtypes and datasets. Dataset and subtype pages "reverse-render" a Related Blog Articles section by filtering the blog for articles whose related_* array contains their key.
Standalone Collections
| Collection | Storage | Notes |
|---|---|---|
| Research Labs | content/data/research_labs.json |
Referenced by Biobank via affiliated_lab (by key); not linked elsewhere |
| People | content/data/people.json |
Not linked from any other collection |
| Announcements | content/data/announcements.yaml |
Date-filtered client-side; shown on homepage |
| Biobank | content/data/biobank/*.md |
One file per entry; references a Research Lab by key; lab name + country derived from that lab |
Vocabulary Lists
Vocabulary fields store string values directly — they are not linked by key. Changing a vocabulary term does not automatically update existing entries.
| Vocabulary | File | Used in |
|---|---|---|
| Datatypes | content/data/datatypes.yaml |
Datasets |
| Sources / Hosts | content/data/sources.yaml |
Datasets, Subtypes |
| Data Origins | content/data/data_origins.yaml |
Datasets |
| Detection Methods | content/data/detection_methods.yaml |
Datasets |
| Countries | content/data/countries.yaml |
Datasets |