Goodreads book cataloguing database schema

How a book cataloguing site models its data: works split from editions and ISBNs, contributors with roles, default and custom shelves, reading progress, ratings and reviews, series ordering and a friend activity feed.

Goodreads ER diagram

Goodreads book cataloguing database schema n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 works idBIGINT titleVARCHAR original_languageCHAR first_published_y…SMALLINT descriptionTEXT average_ratingDECIMAL ratings_countINTEGER created_atDATETIME editions idBIGINT work_idBIGINT isbn13CHAR titleVARCHAR formatVARCHAR publisherVARCHAR published_onDATE languageCHAR page_countSMALLINT audio_secondsINTEGER cover_image_keyVARCHAR authors idBIGINT nameVARCHAR sort_nameVARCHAR birth_yearSMALLINT death_yearSMALLINT bioTEXT is_claimedBOOLEAN work_contributors work_idBIGINT author_idBIGINT roleVARCHAR positionTINYINT series idBIGINT nameVARCHAR descriptionTEXT is_completeBOOLEAN book_countSMALLINT series_works series_idBIGINT work_idBIGINT positionDECIMAL is_optionalBOOLEAN users idBIGINT emailVARCHAR usernameVARCHAR display_nameVARCHAR bioVARCHAR annual_goalSMALLINT is_privateBOOLEAN created_atDATETIME shelves idBIGINT user_idBIGINT nameVARCHAR shelf_typeVARCHAR is_exclusiveBOOLEAN book_countINTEGER created_atDATETIME shelvings idBIGINT shelf_idBIGINT edition_idBIGINT work_idBIGINT added_atDATETIME started_onDATE finished_onDATE notesVARCHAR reading_progress idBIGINT user_idBIGINT edition_idBIGINT page_numberSMALLINT audio_secondsINTEGER percent_completeTINYINT commentVARCHAR updated_atDATETIME reviews idBIGINT user_idBIGINT work_idBIGINT edition_idBIGINT ratingTINYINT bodyTEXT has_spoilersBOOLEAN likes_countINTEGER created_atDATETIME updated_atDATETIME friendships idBIGINT requester_idBIGINT addressee_idBIGINT statusVARCHAR created_atDATETIME responded_atDATETIME activity_events idBIGINT user_idBIGINT kindVARCHAR work_idBIGINT review_idBIGINT summaryVARCHAR created_atDATETIME

Related database schemas