From 244a4821c89183dd6a953c790d4a953a66a8e4dd Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Fri, 9 Oct 2026 00:26:00 +0100 Subject: Document database schema in the manual. --- doc/domagi.dbk | 39 ++++++++++++++++++++++++++++ doc/er.pic | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/schema.pic | 45 +++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 doc/er.pic create mode 100644 doc/schema.pic (limited to 'doc') diff --git a/doc/domagi.dbk b/doc/domagi.dbk index 0888ac1..f2ef70d 100644 --- a/doc/domagi.dbk +++ b/doc/domagi.dbk @@ -5,6 +5,45 @@ domagi manual 2026Arun Isaac + + Database Schema + domagi uses a SQL schema with the following four tables to represent a pangenome. + + + segment + entity representing pangenome segments + + + link + many-to-many relation between segments representing pangenome links + + + path + entity representing pangenome paths + + + path_segment + many-to-many relation mapping paths to segments associating them with the path at a certain coordinate + + + The schema and the entity relationship diagram are visualized in and respectively. +
+ domagi database schema + + + + + +
+
+ domagi entity relationship diagram in Chen's notation + + + + + +
+
Reference diff --git a/doc/er.pic b/doc/er.pic new file mode 100644 index 0000000..211126a --- /dev/null +++ b/doc/er.pic @@ -0,0 +1,80 @@ +### domagi --- DuckDB-powered pangenome Swiss Army knife +### Copyright © 2026 Arun Isaac +### +### This file is part of domagi. +### +### domagi is free software: you can redistribute it and/or modify it under the +### terms of the GNU General Public License as published by the Free Software +### Foundation, either version 3 of the License, or (at your option) any later +### version. +### +### domagi is distributed in the hope that it will be useful, but WITHOUT ANY +### WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +### FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +### details. +### +### You should have received a copy of the GNU General Public License along with +### domagi. If not, see . + +down +SegmentId: ellipse "id" italic fill lightgrey +move 0.5cm +SegmentName: ellipse "name" fill lightgrey +move 0.5cm +SegmentSequence: ellipse "sequence" fill lightgrey + +line from SegmentId.e \ + right 1cm \ + then down until even with SegmentSequence \ + then to SegmentSequence.e +line from SegmentName.e right 2cm + +Segment: box "segment" fill mediumslateblue +line "n" above +IsIn: diamond "is in" fill coral +line "n" above thick +Path: box "path" fill mediumslateblue +down + +line; line right 1cm +ellipse "id" italic fill lightgrey +down +move 0.5cm +PathName: ellipse "name" fill lightgrey +line from Path.s \ + down until even with PathName \ + then to PathName.w + +line from IsIn.s \ + down \ + then left +ellipse "orientation" fill lightgrey width 125% +down +move 0.5cm +IsInStart: ellipse "start" fill lightgrey +move 0.5cm +IsInEnd: ellipse "end" fill lightgrey +line from IsIn.s \ +down until even with IsInStart \ +then to IsInStart.e +line from IsIn.s \ +down until even with IsInEnd \ +then to IsInEnd.e + +move from Segment.n up +Links: diamond "links" fill coral +right +move; move +ToOrientation: ellipse "to-orientation" fill lightgrey width 175% +up +move 0.5cm +FromOrientation: ellipse "from-orientation" fill lightgrey width 175% +line from Links.e to ToOrientation.w +line from FromOrientation.w \ +left 1cm \ +then down until even with ToOrientation + +# The space in "n " and " n" is a slight trick to nudge the labels a +# little. +line from Links.sw down until even with Segment.n "n " rjust +line from Links.se down until even with Segment.n " n" ljust \ No newline at end of file diff --git a/doc/schema.pic b/doc/schema.pic new file mode 100644 index 0000000..cdf816c --- /dev/null +++ b/doc/schema.pic @@ -0,0 +1,45 @@ +### domagi --- DuckDB-powered pangenome Swiss Army knife +### Copyright © 2026 Arun Isaac +### +### This file is part of domagi. +### +### domagi is free software: you can redistribute it and/or modify it under the +### terms of the GNU General Public License as published by the Free Software +### Foundation, either version 3 of the License, or (at your option) any later +### version. +### +### domagi is distributed in the hope that it will be useful, but WITHOUT ANY +### WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +### FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +### details. +### +### You should have received a copy of the GNU General Public License along with +### domagi. If not, see . + +down +Segment: box "segment" fill lightgrey +SegmentId: box "id" +box "name" +box "sequence" + +Link: box "link" at 8cm right of Segment width 175% fill lightgrey +LinkFromSegment: box "from_segment" width 175% +box "from_orientation" width 175% +LinkToSegment: box "to_segment" width 175% +box "to_orientation" width 175% + +Path: box "path" at 8cm below Segment fill lightgrey +PathId: box "id" +box "name" + +box "path_segment" at 8cm right of Path width 200% fill lightgrey +PathSegmentPathId: box "path_id" width 200% +PathSegmentSegmentId: box "segment_id" width 200% +box "segment_orientation" width 200% +box "start" width 200% +box "end" width 200% + +arrow from SegmentId.e to LinkFromSegment.w +arrow from SegmentId.e to LinkToSegment.w +arrow from SegmentId.e to PathSegmentSegmentId.w +arrow from PathId.e to PathSegmentPathId.w \ No newline at end of file -- cgit 1.4.1