PostgreSQL. Как создать таблицу "измерения" из запроса "выбрать отдельный" и создать первичный и внешний ключ?
У меня есть таблица фактов со многими записями, и у них есть столбцы для отправки, которые очень тесно связаны, но ни один из столбцов не всегда уникален. Я хотел бы создать для этого таблицу измерений и ссылаться на строки новой таблицы измерений, используя ключ.
Я могу создать новую таблицу измерений с таблицей создания в качестве отдельного элемента select, и я могу добавить для нее первичный ключ номера строки, но я не уверен, как поместить соответствующий внешний ключ в таблицу фактов, где они совпадают.
Я мог бы легко создать новый столбец внешнего ключа и заполнить его, используя, где сопоставить старые отдельные строки в таблице фактов с различными строками в таблице измерений, но нет простого столбца для сопоставления (так как ключа еще нет), поэтому мне нужно создать сопоставление "где", которое соответствует всем столбцам вместе, а затем назначить первичный ключ из таблицы измерений?
Возможно, я просто ленив и не хочу исследовать, как создавать измененные запросы и как создавать сложные, где сопоставления, но это кажется довольно распространенным действием для управления базами данных, поэтому я чувствую, что это может помочь другим.
1 ответ
Я предполагаю, что один из способов сделать это - создать объединение всех значений во всех столбцах для каждой строки в новом измерении, чтобы создать уникальный идентификатор из данных, а затем сделать то же самое для столбцов в измерении фактов., Теперь между ними есть уникальный ключ, который можно преобразовать в целочисленный идентификатор. Добавьте новый столбец последовательности в новом измерении, затем создайте новый столбец в факте и установите для него целочисленный идентификатор в новом измерении, в котором объединенный идентификатор является таким же.
Это, очевидно, очень неэффективно, так как все содержимое нового измерения должно быть продублировано, а также снова в измерении фактов - просто для создания ссылки.