|
|
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Доброе время суток. Классическая задача на библиотеку. Только международную. Представим себе библиотеку, в которой есть "война и мир" переведенная на разные языки. Как построить связи? Пусть есть упрощенная модель данных, в которой рассматриваем только: - произведения - книги - язык Произведения хранят информацию о названии. Книги это то что непосредственно лежит на полке. Они могут быть разного издания и на разных языках. Язык - справочник языков. Читатель может запросить одну и туже книжку на разных языках. Пример данных: У нас есть "война и мир" - русское издание 2 книги - английское 1 книга - испанское 1 книга 1. Нам необходимо знать что это одно и тоже произведение. 2. Книга должна содержать ключ по которому мы можем выбрать издание на нужном языке. 3. Названия не должны дублироваться в разных таблицах. 1 Вариант реализации связей: Произведение -> Название на нужном языке(+связь со справочником языков) -> Книга Недостаток в том, что придется хранить название как в таблице "Произведение" так и в таблице "Название на нужном языке". Т.е. если в Произведении используется дефолтный язык, то нам с ним в любом случае нужно создавать запись в "Название на нужном языке". Такая схема не защищает от аномалии. 2 Вариант. Язык -> Произведение -> Книга Дублирования нет, но теряем сущность которая могла бы ответить на вопрос "Выдайте мне все варианты книги "Война и Мир"". 3. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 03:27 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
значок "->" - показывает связь от родительской к дочерней. один ко многим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 03:29 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Кореец, может быть "Произведения" замкнуть на себя с помощью id+id_parent? но тогда запрос на полный список будет строиться некрасиво в 2 шага 1. найти книгу по названию 2. выбрать все ее родительские и дочерние записи PS фичи некоторых СУБД конечно позволяют это сделать одним запросом, но в любом случае наша схема не должна зависеть от какого-то определенного вида СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 03:42 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
вопрос интересует чисто с точки зрения теории нормализации. как схема должна обеспечить отсутствие аномалий обновления и нужную выборку классическим SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 03:47 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
разноязычные версии неравнозначны, и, в общем случае, переводы вторичны. можно ввести сущность "перевод" и у перевода будет свой автор. можно предположить что возможны не просто переводы но еще и "авторские версии" на разных языках (или на одном :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 06:49 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
>Такая схема не защищает от аномалии. О какой аномалии идет речь. Это РАЗНЫЕ сущности. Которые однако часто совпадают. Общеупотребительное,_введенное_для_облегчения_поиска_и_объединения_книг_название на дефолтном языке и название конкретного издания. По сути перевод ничем не отличается от разного издания на одном и том же языке. Пример "Пособие по укладке парашюта. Издание второе исправленное" Короче, я за вариант первый. KISS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 07:50 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
SERG1257Короче, я за вариант первый. KISS у перевода свой автор, и он не автор произвдения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 09:38 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Интересно как быть тогда со всякими гиперболоидами инженера Гарина. Автор один, название одно, варианта - два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 14:59 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
5798у перевода свой автор, и он не автор произвденияИ чо. Поле trunslator_id в книжке или кросстаблица в случае множества переводчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2013, 17:39 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Хороший вопрос, Кореец. Есть смысл разделить вашу задачу на две: перевод и издание. Разные издания одной и той же книги не обязаны совпадать. Существуют сборники произведений. Существуют производные инструменты (например, авторефераты или рецензии). Здесь, в общем, особых проблем нет, для переводов важна необходимость связи версии издания и произведения. С переводами чуть сложнее. Рассмотрите предельный вариант, когда книга - это сборник произведений, переведенных разными переводчиками на несколько языков (для каждого языка может быть свой переводчик), - это будет решение в общем виде. > 1. Нам необходимо знать что это одно и тоже произведение. Это некорректная постановка задачи. Об идентичности есть смысл говорить для произведения и версии его издания. Для подобия - да, достаточно только произведения. > 3. Названия не должны дублироваться в разных таблицах. Очевидное решение: вынесите названия в отдельную таблицу. Постройте семантические связи. Ни один из предложенных вами вариантов не является решением задачи, но думаете вы в правильном направлении. Попутно вам придется решать более сложную задачу: языковые эквиваленты имен авторов и переводчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 03:33 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
guest_20040621Есть смысл разделить вашу задачу на две: перевод и издание. есть смысл подумать чем отличается издание произведения от издания его перевода ну и подумать какой смысл делить одну задачу на две по этому признаку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 13:51 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
> чем отличается издание произведения от издания его перевода Они связаны общим исходным текстом, ничем больше. Переводов оригинального текста может быть любое количество. Включая название. > какой смысл делить одну задачу на две по этому признаку Хотите сказать, что можете решить задачу целиком? ddl - в студию. Первый разбор ошибок - бесплатно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 14:32 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
SERG1257>Такая схема не защищает от аномалии. О какой аномалии идет речь. Это РАЗНЫЕ сущности. Которые однако часто совпадают. "Пособие по укладке парашюта. Издание второе исправленное" Короче, я за вариант первый. KISS Тут исходит из понимания автора. Если автор изменил даже название книги, то возможно что он ее переписал так, что это стала другая книга. Тогда да. Как и например "Справочник Oracle 8 ", "Справочник Oracle 9 ", "Справочник Oracle 10 " - это будут все разные книги. И в то же время если издание второе включает себя только исправления ошибок и опечаток, то это уже та же книжка и "издание " это ее атрибут . В любом случае представьте пример: 1. Приходит читатель и спрашивает книгу "War and Peace". Учитывая что библиотекарь не может помнить все названия переводов на все языки, то он так ее и введет. И вот тут запрос к таблице "Произведения" становится бессмысленен. А значит мы не имеем права вообще к ней строить запрос, а должны сразу искать по второй табличке. 2. Тот же читатель говорит, а дайте эту же книжку на испанском, как она на испанском называется не помнит, как раз его изучает и вот тут эта же таблица Произведение сослужит службу - ибо по ключу произведений мы можем из таблиц переводов выдать все варианты книг. Получается что произведение нужно только для группировки книг и название в нем роль играет только для того кто вводит данные в БД. Вот тут и возникает момент, что он одно и тоже вводит два раза. Вроде эту необходимость можно объяснить логически, но представьте, что в реале большинство книг всего на одном языке, книг местных же гораздо больше чем книг получивших международное признание. И вот оператор создавая каталог, для абсолютного большинства книг делает одну и туже операцию дважды. А чем больше таких действий тем больше вероятность создания аномалии. Схема от нее не защищает, да и человеку объяснить почему он должен как дондик вводить два раза одно и тоже будет трудно. Он после пары дней работы сам у вас попросит, чтобы это как то создавалось автоматически во второй табличке, а он мог на уровне первого ввода сразу указывать и язык. И вот тут начнется программирование... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 16:30 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
guest_20040621Это некорректная постановка задачи. Об идентичности есть смысл говорить для произведения и версии его издания. Для подобия - да, достаточно только произведения. > 3. Названия не должны дублироваться в разных таблицах. Очевидное решение: вынесите названия в отдельную таблицу. Постройте семантические связи. Ни один из предложенных вами вариантов не является решением задачи, но думаете вы в правильном направлении. Попутно вам придется решать более сложную задачу: языковые эквиваленты имен авторов и переводчиков. Имена авторов пока не рассматриваю для упрощения задачи. Мне кажется это отдельная ветка связей должна быть. По поводу идентичности - это зависит от того, что просит найти читатель: 1. Один изучает саму историю произведения и запрашивает конкретное издание книги и это + AND издание = ? к запросу по книгам. Издание пусть будет атрибутом книги. 2. Другой изучает языки, учится литературному переводу и издание ему не важно какое. Ему просто нужно получить Войну и Мир на английском и испанском. А вот произведения входящие в сборник - это да. Тут сложнее. Сам по себе сборник это отдельное произведение, допустим сборник сказок разных народов мира для детей. Но в одной книге и Оловянный солдатик и сказка о попе и работнике балде. И вот ту чет сложно все получается. Хуже всего если книгу придется наследовать всегда от Сборника. Тогда возможностей для аномалий еще больше будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 16:55 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
> Имена авторов пока не рассматриваю Понятно. Отметьте себе, что у авторов бывают псевдонимы. > Мне кажется это отдельная ветка связей должна быть Конечно. > Издание пусть будет атрибутом книги Да. Издание может быть стереотипным и измененным. Предполагается, что для некоторых книг - например, религиозного характера - издания могут быть только стереотипными. Книги могут издаваться на языках, вышедших из употребления, диалектах языков или специальных языках (например, тактильных). > А вот произведения входящие в сборник - это да. Тут сложнее. Сложность в том, что в сборник могут входить произведения, не издававшиеся отдельно, а опубликованные автором в качестве набора произведений. > И вот ту чет сложно все получается :) Вы только начали. Представьте, что у библиотеки может быть еще и фонотека, и хранилище микрофильмов. > Хуже всего если книгу придется наследовать всегда от Сборника Забудьте про наследование. Оперируйте отношениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 17:54 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Про коды нигде не говорилось, но подразумевается, что и международное, и национальное кодирование изданий присутствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2013, 17:57 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Есть смысл разделить вашу задачу на две: перевод и издание. я бы обобщила и ввела произвольный набор отношений между объектами (издания, продукт - книга-журнал и т.п., и авторы). отношения типа - авторы могут быть в отношениях псевдонима. Книги могут быть в отношениях - перевод, новое издание, расширенное издание и т.п. а потом отчеты настраивать на эти отношения с учетом приоритетов, которые определяют приоритетность отношений. Т.е. разные отчеты могут учитывать разные отношения. В каких-то выводить объекты в отношениях "Перевод", а в других - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 05:38 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Рад Вас видеть, Карина. > я бы обобщила и ввела произвольный набор отношений между объектами (издания, продукт - книга-журнал и т.п., и авторы) Поскольку задача носит учебный характер, я хотел предложить автору сначала выделить специфичные атрибуты, в т. ч. связанные с носителем. Если бы он предложил решения для описанных случаев, осталась бы периодика и специальные формы, с ними уже проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 08:07 |
|
||
|
Библиотека. Казалось бы все просто. А если включить переводы?
|
|||
|---|---|---|---|
|
#18+
Mainframe_старый Книги могут быть в отношениях - перевод, новое издание, расширенное издание и т.п. а потом отчеты настраивать на эти отношения с учетом приоритетов, которые определяют приоритетность отношений. Т.е. разные отчеты могут учитывать разные отношения. В каких-то выводить объекты в отношениях "Перевод", а в других - нет. Переводят то не книгу, переводят произведение. А книга это просто как носитель информации с переплетом. Есть от издательства Амфора, а есть от издательства Художник. Но ваша мысль ясна. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=40&tid=1541349]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 317ms |

| 0 / 0 |
