Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | test.db | Ограничение памяти: | 256 Мб | |
Выходной файл: | test.log |
После того как Вася устроился сисадмином в одну крупную научную библиотеку, он пришел в ужас от того, насколько небрежно была сформирована библиографическая база, с которой ему на тот момент предстояло работать.
Ранее все данные об имеющихся в наличии научных статьях собирались в одну большую таблицу ARTICLES:
AUTHOR_NAME VARCHAR NOT NULL, TITLE VARCHAR NOT NULL, YEAR INTEGER NOT NULL; |
У записей в такой таблице для авторов, имеющих более одной статьи, первый атрибут будет повторяться. Последние два атрибута также могут совпасть, если в таблице имеются статьи, написанные группой авторов.
В дальнейшем была добавлена еще одна таблица, содержащая биографические данные авторов AUTHORS:
NAME VARCHAR NOT NULL, BIRTH DATE NOT NULL, DEATH DATE DEFAULT NULL, |
ID INTEGER PRIMARY KEY; |
Во избежание путаницы и дублирования отдельных полей следует привести указанные таблицы к одной из нормальных форм.
После недолгих раздумий, Вася принял решение реорганизовать таблицу ARTICLES:
TITLE VARCHAR NOT NULL, YEAR INTEGER NOT NULL, |
ID INTEGER PRIMARY KEY; |
В свою очередь, связи между авторами и их публикациями он намеревается вынести в отдельную таблицу, содержащую привязку к AUTHORS.ID и ARTICLES.ID.
Проблемы возникли после того, как он обнаружил, что поле NAME у разных авторов может совпадать.
Чтобы разобраться в данной ситуации Вася тщательно изучил имеющийся свод правил и обнаружил следующие утверждения:
- авторы могут публиковать свои работы только по наступлении 18-летия;
- в некоторых случаях также возможна посмертная публикация статьи, но не позднее 100 дней со дня смерти автора.
Однако этого также может оказаться недостаточно, т.к. годы жизни одноименных авторов могут перекрываться.
В этом случае следует определить всех возможных авторов для каждой отдельной работы.
Для того, чтобы помочь Васе, от Вас требуется написать SQL-запрос.
Результат запроса должен представлять собой объединение (JOIN) таблиц AUTHORS и ARTICLES,
где первый столбец будет содержать AUTHORS.ID,
второй и третий столбцы — ARTICLES.TITLE и ARTICLES.YEAR, соответственно;
а последний столбец принимает одно из двух значений:
'?' — если авторство находится под вопросом;
'+' — если оно достоверно установлено.
Статьи, не принадлежащие конкретному автору, а также авторы, не имеющие ни одной статьи, в выборку не добавляются.
Сортировка производится по всем имеющимся столбцам в порядке их следования.
Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.
Полагается, что для работы с базой данных используется SQLite3.
Значения типа DATE задаются в виде строк, имеющих следующий формат: YYYY-MM-DD