Сделать bibcode - primary key для связи библиографии с данными #160
Replies: 1 comment
-
|
Немного контекста, почему этот вопрос вообще возник: Мне хочется сделать интерфейс загрузки данных наиболее простым для подавляющего большинства случаев. В моей голове самый типичный процесс загрузки данных выглядит следующим образом:
Все опубликованные статьи имеют своим уникальным внешним идентификатором bibcode, поэтому я и предложил сделать его изначально первичным ключом. По поводу пункта 4 согласен - у нас легко может сложиться ситуация, когда bibcode будет повторяться (не связанный с дискуссией, но прямо следующий за этим вопрос - не стоит ли снять ограничение UNIQUE с поля Пока что создание таблицы из пункта 1 выше выглядит следующим образом:
На мой взгляд для подавляющего большинства случаев использования этот интерфейс можно упростить и передавать сразу bibcode во второй метод без промежуточного показывания пользователю отдельного числа (нашего внутреннего id). Это не значит, что мы не будем сохранять себе запись в библиографии - только то, что мы не будем просить пользователя запоминать какое-то случайное, на его взгляд, число. Это упростит интерфейс для пользователя и увеличит функциональность метода создания таблицы. Для отдельных случаев, когда, например, данные получены из внутренней коммуникации, можно сделать отдельный метод API для создания записи в библиографии об этой внутренней коммуникации. Главное, чтобы для самого базового сценария, когда bibcode всё же есть, не приходилось знать об этом методе и можно было пользоваться только методом создания таблицы напрямую. Учитывая плюсы и минусы из комментария выше, предлагаю среднее решение:
Этот идентификатор не обязательно делать длинным. Можно, например, сделать что-то следующее: Такое решение уберёт проблему, описанную в минусах 3 и 4 в комментарии выше. Минус номер 2 мне видится неизбежным - нам в любом случае приходится иметь какой-то алгоритм, по которому для опубликованных статей идти в ADS за данными о заголовке, авторе и годе, а для внутренних коммуникаций - нет. Сейчас это простая проверка, что нам прислали NULL в поле bibcode создания библиографии, но этим мы упрощаем жизнь себе за счёт усложнения её пользователю - он должен знать, что если bibcode не передан, то нужно обязательно передать title, author и year, и наоборот - если bibcode передан, то мы проигнорируем остальные поля. В итоге остаётся минус номер 1, но мне кажется, что это не очень большая цена за упрощение интерфейса взаимодействия с Leda, особенно если сделать алгоритм совсем не сложным, как выше. Это позволит в методе API на создание таблицы сделать одно-единственное поле
Для того, чтобы алгоритм выше мог работать, нам надо, чтобы по регулярному выражению можно было отличить наш внутренний идентификатор от bibcode. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
В настоящее время структура библиографии имеет два ключевых поля
id PRIMARY KEY- предназначено для связи между библиографией и даннымиbibcode UNIQUE- предназначено для связи с ADS & CDSidгенерируется автоматическиbibcodeобязан (в идеале) указывать на реальную библиографию во внешней БДТекущая схема позволяет не беспокоиться об уникальности идентификатора для библиографии и создавать свои собственные записи, не привязанные к ADS. Например, обработка приватных сообщений, работа над кроссидентификацией объектов, решение запутанных ситуаций с данными, свои собственные проекты, такие как работа над Местным Объемом, создание каталогов и т.п. При этом,
bibcodeотвечает только за "внешние связи".Чисто технически, нет большой сложности объединить
idиbibcodeв один ключ, который будет нести в себе как связь с данными в Леда, так и связь с ADS.На данный момент, я вижу не очень много плюсов от этого:
rawdata.tablesполеbibбудет содержать bibcode в явном виде (это легко решается созданиемпредставлениясвязывающего данные с библиографией)idиbibcodeдублирует друг другаМинусы, которые я вижу от отказа от числового автогенерируемого
id:bibcodebibcodeсоответствует формату и есть шанс получить оттуда данныеbibcode.bibcodeтеряет свою уникальность.На данный момент, я бы сказал, что склоняюсь к мысли, что надо оставить оба ключа как есть. Т.е.
idдля связи данных и библиографии в нашей БД, иbibcode- для связи с ADS.Beta Was this translation helpful? Give feedback.
All reactions