56 lines
4.1 KiB
Plaintext
56 lines
4.1 KiB
Plaintext
proposed extensible schema to generalize beyond audible
|
|
|
|
problems
|
|
0) reeks of premature optimization
|
|
- i'm currently only doing audible audiobooks. this adds several layers of abstraction for the sake of possible expansion
|
|
- there's a good chance that supporting another platform may not conform to this schema, in which case i'd have done this for nothing. genres are one likely pain point
|
|
- libation is currently single-user. hopefully the below would suffice for adding users, but if i'm wrong it might be all pain and no gain
|
|
1) very thorough == very complex
|
|
2) there are some books which would still be difficult to taxonimize
|
|
- joy of cooking. has become more of a brand
|
|
- the bible. has different versions that aren't just editions
|
|
- dictionary. authored by a publisher
|
|
3) "books" vs "editions" is a confusing problem waiting to happen
|
|
|
|
[AIPK=auto increm PK]
|
|
|
|
(libation) users [AIPK id, name, join date]
|
|
audible users [AIPK id, AUDIBLE-PK username]
|
|
libation audible users [PK user id, PK audible user id -- cluster PK across all FKs]
|
|
- potential danger in multi-user environment. wouldn't want one libation user getting access to a different libation user's audible info
|
|
contributors [AIPK id, name]. prev people. incl publishers
|
|
audible authors [PK/FK contributor id, AUDIBLE-PK author id]
|
|
roles [AIPK id, name]. seeded: author, narrator, publisher. could expand (eg: translator, editor) without each needing a new table
|
|
books [AIPK id, title, desc]
|
|
book contributors [FK book id, FK contributor id, FK role id, order -- cluster PK across all FKs]
|
|
- likely only authors
|
|
editions [AIPK id, FK book id, title]. could expand to include year, is first edition, is abridged
|
|
- reasons for optional different title: "Ender's Game: Special 20th Anniversary Edition", "Harry Potter and the Sorcerer's Stone" vs "Harry Potter and the Philosopher's Stone" vs "Harry Potter y la piedra filosofal", "Midnight Riot" vs "Rivers of London"
|
|
edition contributors [FK edition id, FK contributor id, FK role id, order -- cluster PK across all FKs]
|
|
- likely everything except authors. eg narrators, publisher
|
|
audiobooks [PK/FK edition id, lengthInMinutes]
|
|
- could expand to other formats by adding other similar tables. eg: print with #pages and isbn, ebook with mb
|
|
audible origins [AIPK id, name]. seeded: library. detail. json. series
|
|
audible books [PK/FK edition id, AUDIBLE-PK product id, picture id, sku, 3 ratings, audible category id, audible origin id]
|
|
- could expand to other vendors by adding other similar tables
|
|
audible user ratings [PK/FK edition id, audible user id, 3 ratings]
|
|
audible supplements [AIPK id, FK edition id, download url]
|
|
- pdfs only. although book download info could be the same format, they're substantially different and subject to change
|
|
audible book downloads [PK/FK edition id, audible user id, bookdownloadlink]
|
|
pictures [AIPK id, FK edition id, filename (xyz.jpg -- not incl path)]
|
|
audible categories [AIPK id, AUDIBLE-PK category id, name, parent]. may only nest 1 deep
|
|
(libation) library [FK libation user id, FK edition id, date added -- cluster PK across all FKs]
|
|
(libation) user defined [FK libation user id, FK edition id, tagsRaw (, notes...) -- cluster PK across all FKs]
|
|
- there's no reason to restrict tags to library items, so don't combine/link this table with library
|
|
series [AIPK id, name]
|
|
audible series [FK series id, AUDIBLE-PK series id/asin, audible origin id]
|
|
- could also include a 'name' field for what audible calls this series
|
|
series books [FK series id, FK book id (NOT edition id), index -- cluster PK across all FKs]
|
|
- "index" not "order". display this number; don't just put in this sequence
|
|
- index is float instead of int to allow for in-between books. eg 2.5
|
|
- if only using "editions" (ie: getting rid of the "books" table), to show 2 editions as the same book in a series, give them the same index
|
|
(libation) user shelves [AIPK id, FK libation user id, name, desc]
|
|
- custom shelf. similar to library but very different in philosophy. likely different in evolving details
|
|
(libation) shelf books [AIPK id, FK user shelf id, date added, order]
|
|
- technically, it's no violation to list a book more than once so use AIPK
|