Отслеживание аннотаций для коллекции книг с базой данных SQL - PullRequest
0 голосов
/ 24 апреля 2019

Мне нравится создавать основанное на базе данных веб-приложение (PHP с mySQL), которое отображает собранные работы (источники) нескольких древних и средневековых философов. Источники должны быть доступны на их оригинальных языках, в основном на древнегреческом, латинском и арабском языках. Пользователи должны иметь возможность переводить и комментировать любой контент источников.

Авторские i собранные работы хранятся в scrAuthori:

 PK
|scrAuthoriId|booktitle|page|line|position|word
|1           |bookA    |1   |1   |1       |word1
|2           |bookA    |1   |1   |2       |word2
...
|342         |bookB    |234 |3   |11      |word3453

Авторские i собранные работы имеют различные виды контента, которые представляют интерес: слова, выражения, охватывающие более двух слов, предложение, предложения, абзац, абзацы и т. Д. Пользователи могут определять, какой контент представляет интерес (т.е. BookA, страница 1, строка 3 до BookA, страница 3, строка 5). Будет переводить контент и добавлять комментарии к нему.

Содержимое определяется в authoriContents:

 PK                FK1          FK2
|authoriContentsId|scrAuthoriId1|scrAuthoriId2|
|1                |1            |100
|231              |234          |1029

Перевод в translationsAuthori:

 PK                    FK
|translationAuthorIId|authorIContentsId|translation|
|1                   |3                |uvw
|2                   |3                |xyz
|2                   |45               |abc

Соотношение между комментариями и контентом должно быть много ко многим: пользовательский комментарий относится к двум или более контентам, а контент может содержать более одного комментария.

authorIContents_author1Comments

 FK                FK
|authoriContentsId|authoriCommentsId
|1                |3        
|4                |3        
|231              |45   

authoriComments

 PK                FK
|authoriCommentsId |comment
|3                 |comment on content 1 and 4
|45                |comment on content 231

Поскольку это мое первое приложение для работы с базами данных, я не уверен, выполнимо ли это решение. Является ли плохое решение в свете производительности хранить собранные произведения слово в слово? Каждый scrAuthori, i = 1, 2, ... 10 будет иметь до миллиона строк. После установки строки scrAuthori не изменятся. Есть ли лучший подход к проблеме отслеживания аннотаций к разным видам контента?

Ответы [ 4 ]

0 голосов
/ 27 апреля 2019

Учитывая комментарии, я склонен к следующему решению.

Определения

Источники - это собрание сочинений нескольких авторов.

Содержание источника составлено из любых слов, предложений, абзацев, глав и т. Д. Вкратце содержание составлено из семантических единиц, найденных в определенном источнике, например, Автор, booktitle,страница 1, строка 4 - Автор, буклет, страница 2, строка 5.

Отношения

Каждый контент может относиться ко многим переводы (один ко многим).

Каждый контент может относиться ко многим комментариям и каждому комментарию ко многим содержание (много ко многим).

Таблицы

Для N авторов их N таблиц, каждая из которых содержит собранные произведения автора построчно,Таблица собранного сочинения Автора i:

scrAuthori

PK
lineId | booktitle | page | linenumber | line
1      | aaa       | 1    | 1          | aaa
2      | aaa       | 1    | 2          | bbb

Таблица авторов:

authors

PK
authorId  | name
a1        | author1
a2        | author2

ТаблицаСодержание:

contents

PK          FK         (scrAuthori.linenumber)
contentId | authorId | lineBegin | lineEnd
1         | a1       | 3         | 5
2         | a1       | 6         | 100

Таблица переводов:

translation

PK              FK          
translationId | contentId | translation
1             | 3         | aaa
2             | 4         | bbb

Таблица комментариев:

comment

PK          FK          
commentId | comment
1         | aaa
2         | bbb    

Ассоциативная таблица между содержанием и комментариями:

contents_comments

PK                  FK          FK           
content_commentId | contentId | commentId
1                 | 1         | 1
2                 | 1         | 2           

Здесь - изображениеструктуры.

Является ли это подходящим решением с точки зрения масштабируемости (собранные сочинения авторов будут добавляться со временем) и производительности (каждая таблица scrAuthori может содержать до миллиона строк)?

0 голосов
/ 26 апреля 2019

Я бы предпочел разложить эту задачу на две части:

  1. Определить подход к адресации.Например, это может быть начальный и конечный символ кавычки или что-то еще.В любом случае, для клиента это может быть представлено в разных интерфейсах (выберите параграф или главу и т. Д.), Но это должен быть точный метод адресации.

  2. Хранить в таблице: author_id, book_id, quote_begin, quote_end, quote_identifier_for_user, user_id, action_id, action_data, action_date_time.Что-то в этом роде.

Это должно обеспечить вам совершенно нормальную форму, простое управление и выбор данных.

0 голосов
/ 27 апреля 2019

@ Ван Нг: Вы имеете в виду, разлагая что-то вроде это ?

0 голосов
/ 25 апреля 2019

@ saritonin

После прочтения вашего комментария я снова посетил таблицу источников (scrAuthori). Рассматривая таблицу содержимого (authoriContents), я понял, что scrAuthori должен содержать только семантические единицы, из которых будет составлен контент, предназначенный для перевода или комментирования. Как вы и предлагали (пунктуация), я теперь склонен выбирать предложения.

На самом деле мое решение выглядит как это

Отображение источников должно соответствовать опубликованной версии книг (строка за строкой, страница за страницей и т. Д.), Поэтому я нашел некоторое сопоставление предложений со структурой рассматриваемой книги (например, Беккер чисел для Аристотеля).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...