diff options
Diffstat (limited to 'notes/data_model.md')
-rw-r--r-- | notes/data_model.md | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/notes/data_model.md b/notes/data_model.md new file mode 100644 index 00000000..fe21b533 --- /dev/null +++ b/notes/data_model.md @@ -0,0 +1,92 @@ + +## Cookbook + +To create a new works: + + login/create account + + match/lookup on first work; if found, modify not create + TODO: match/lookup on files? + + new edit group (under account; wip) + new edit (under group) + + match/lookup on all creators + match/lookup on all refs + TODO: match/lookup on files? + match/lookup container + + new work_rev (linked to edit) + new work_ident (linked to rev; not-live) + contributor stubs/links + new release_rev (linked to work_ident) + new release_ident (linked to rev; not-live) + contributor stubs/links + ref stubs/links + new file_rev + new file_ident + + set edit group state to "review" + + set edit group state to "accepted" + set all ident flags to "live" + + +To edit, eg, a contributor: + + new edit group (under account; wip) + new edit (under group) + + create contributor_rev row (and relationship rows) + + set edit group state to "review" + + set edit group state to "accepted" + point ident row to new rev + + +Accept edit group: + + for each edit: + update entity ident state (activate, redirect, delete) + ? mark revision/edit as immutable + ? append log/changelog row + update edit group state + +## Entity Schema + +Each entity type has tables: + + _rev + core representation of a version of the entity + + _ident + persistant, external identifier + allows merging, unmerging, stable cross-entity references + + _edit + represents change metadata for a single change to one ident + needed because an edit alwasy changes ident, but might not change rev + + _log + history of when edits were actually applied + allows fast lookups of history of an entity (ident) + unnecessary if we keep a log of edit group accepts? + punt on this for now + +## Entity States + + wip (not live; not redirect; has rev) + activate + active (live; not redirect; has rev) + redirect + delete + redirect (live; redirect; rev or not) + split + delete + deleted (live; not redirect; no rev) + redirect + activate + + "wip redirect" or "wip deleted" are invalid states + |