Генерация и регистрация таблиц в rawdata на уровне 0 #59
Replies: 2 comments 5 replies
-
Подумал, что в этой таблице будет удобно хранить текущий статус работы с ней. Что-то типа: |
Beta Was this translation helpful? Give feedback.
-
Из чата: @Kraysent Тогда нам как-то нужно хранить единицы измерения; сейчас они никак не хранится, мы лишь загружаем данные, переводим типы из изначальных в типы постгреса, и делаем INSERT INTO всех столбцов. Предложение следующее: сделать две новые таблицы. Первая - регистр таблиц нулевого уровня. Пока я вижу в нем три поля: id, источник (FOREIGN KEY на таблицу библиографии) и название таблицы. Т.е. с какой библиографией связана та или иная таблица, соотношение - одна библиография ко многим таблицам. Вторая таблица - регистр столбцов с их метаданными. Поля в моей голове следующие - id столбца, id таблицы, в которой этот столбец содержится (FOREIGN KEY на регистр таблиц), название столбца из оригинальной таблицы, единицы измерения из оригинального источника. Можно ещё добавить описание, но я не знаю, нужно ли - отображаться это вроде нигде не будет, и его можно класть в COMMENT к соответствующим столбцам. Тогда при добавлении новой таблицы из какого-то каталога в эти два регистра нужно будет вставлять соответствующие данные. Консистентности, обеспеченной СУБД, как мы обсуждали, не будет, потому что ссылаться на системные таблицы нельзя, но это как будто и не очень страшно - просто сами будем вставлять туда при создании таблицы на нулевом уровне. Тогда при переносе с 0 на 1 уровень мы спросим у пользователя, какие столбцы он хочет использовать для кросс-идентификации, а какие - для внесения данных по результатам этой кросс-идентификации (и в какой каталог). Он ответит, мы поджоиним в эти два регистра (SELECT columns.name, columns.unit FROM tables JOIN columns ON columns.table_id = tables.id WHERE tables.name = "название таблицы", что-то такое) и вытащим оттуда единицы измерения колонок, переведём их в нужные нам единицы измерения и отправим на кросс-идентификацию. Точно так же и переведём единицы измерения для столбцов, которые мы просто собираемся внести в каталог (красное смещение, например). @dimakarov Я сейчас реализовал механизм метаданных на основе комментариев постгреса. Плюс - это поддерживается на уровне БД. Минус - управлять эти приходится вручную. Комментарий - это просто строка с описанием. Я туда записываю метаданные в виде JSON. Одним из параметров JSON могут быть единицы измерения. Можно создать специальную таблицу содержащую список всех колонок всех наших таблиц, что фактически дублирует системные таблицы постгреса. С ними, наверное, чуть проще работать чем с комментариями, но полноценную целостность обеспечить вряд ли удастся. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Хочу обсудить принцип формирования таблиц на уровне 0 в схеме rawdata.
Для удобства в конец сообщения я добавил описание из нашего гугл-документа по структуре Леда.
Каждая новая работа регистрируется с каталоге библиографии и получает уникальный номер
bib
:common.bib (id)
.По аналогии с Леда его можно и нужно использовать при занесении таблиц на уровень 0.
При этом одна библиография может содержать более одной таблицы (в случае данных из CDS они все описываются в файле ReadMe).
В принципе, текущая схема наименования таких таблиц выглядит достаточно универсальной:
rawdata.<prefix><bib>_<cds-table-name>
.Вопрос: нужно ли нам создать специальный список таких таблиц?
К примеру, такую
С одной стороны, особой жизненной необходимости в этом нет, т.к. всегда можно найти соответствующие имена по шаблону в системных таблицах, а описание таблицы можно и нужно делать с помощью механизма метаданных.
С другой стороны, наличие такой таблицы существенно облегчает жизнь при обработке вновь поступивших данных и последующем доступе к ним.
Еще один важный момент, это сделает возможным использование стандартных механизмов ограничений по внешнему ключу при описании наборов данных (
dataset
).Пример:
CREATE TABLE geometry.dataset (
id serial PRIMARY KEY
, datatype text REFERENCES common.datatype (id ) ON DELETE restrict ON UPDATE cascade
, bib integer NOT NULL REFERENCES common.bib ( id ) ON DELETE restrict ON UPDATE cascade
, srctab text REFERENCES rawdata.tables ( table_name ) ON DELETE restrict ON UPDATE cascade
) ;
В данный момент, создание такого внешнего ключа невозможно, т.к. Postgres запрещает ссылаться на системные таблицы.
Текущая схема хранения таблиц исходных данных в HyperLeda
Создается уникальный библиографический номер iref
Для каждой таблицы, описанной в ReadMe-файле создается ее копия в БД с именем
hl<iref>_<tablename>
Структура таблицы полностью дублирует исходную со следующими модификациями:
ra
,dec
с координатами объектов на эпоху J2000.0hl_seq
- номер записи в оригинальной таблицеhl_pgc
- кроссидентификация с Ledahl_idmod
- код идентификацииhl_time
- время переноса данных на уровень 1hl_name
для формирования стандартного имениmetahl<iref>_<tablename>
Структура:
field
- имя поляname
- параметрvalue
- значениеПример:
Beta Was this translation helpful? Give feedback.
All reactions