Я бы, вероятно, использовал нечто подобное в качестве базовой структуры данных.
-- (UI1) = UniqueIndex1
Book (Id (PK), Name)
Verse (Id (PK), BookId (FK / UI1), ChapterNo (UI1), ParagraphNo (UI1),
VerseNo (UI1), VerseText)
Commentator (Id (PK), Name)
Comment (Id (PK), VerseId (FK), CommentatorId (FK), CommentText)
CommentOnComment (Id (PK), CommentorId (FK), CommentId (FK), CommentText)
Не имеет большого смысла разделять главу / абзац / стих на их собственные таблицы, посколькукаждый будет просто целочисленным значением.Комментаторы смогут комментировать стих, который уже был введен, без необходимости повторного ввода текста самостоятельно.
Наличие комментариев к комментариям намекает на какое-то текущее диалоговое окно, так что вы, вероятно, захотите добавить какой-либо способ определения порядка, в котором они были сделаны (например, дата создания записи / номер последовательности).Я предположил, что вы не ищете «комментарии к комментариям к комментариям», которые имеют древовидную структуру и требуют таблицу со ссылками.
Если вы хотите предоставить механизм для простой ссылки настих (1,1,1,1 как предложено) это должно быть сопоставлено при вводе данных в соответствующий идентификатор из таблицы стихов.В этом случае вам следует помнить об идентификаторе, присвоенном каждой Книге.
Сравнения между выпусками?
Если ваше приложение позволит комментировать / сравнивать разные издания, вы можетеположить издание в виде таблицы вместе с книгой:
Edition (Id (PK), Name)
Book (Id (PK), Name)
Verse (Id (PK), EditionId (FK / UI1), BookId (FK / UI1), ChapterNo (UI1),
ParagraphNo (UI1), VerseNo (UI1), VerseText)
Я не эксперт, когда дело доходит до различий между изданиями Библии, но вы сможете легко определить один и тот же отрывок в разных изданиях, отфильтровавна BookId, CapterNo, ParagraphNo, VerseNo, если вы этого не хотите.
Надеюсь, это поможет, Бретт.