В КУРСЕ?

Разбираемся в теме

Одно объявление загрузилось дважды: как хранить данные недвижимости без ложных дублей?

При повторной загрузке данных недвижимости легко получить две строки вместо обновления одной или потерять историю изменения цены. Проблема начинается раньше записи в базу: нужно определить, что считается отдельной сущностью. Разберём учебную модель объявлений из разрешённого источника без обращения к реальным площадкам, сбора контактов и оценки инвестиционной привлекательности.

Разделите объявление и объект недвижимости

У объявления есть идентификатор внутри конкретного источника. У объекта недвижимости может быть несколько объявлений, размещённых разными участниками или в разное время. Поэтому одинаковый адрес ещё не является достаточным правилом автоматического объединения всех строк. В учебной модели используем сочетание названия источника и идентификатора объявления. Например, источник Альфа и номер семнадцать определяют одну запись, а источник Бета с тем же номером другую. В PostgreSQL первичный ключ обеспечивает уникальность значений выбранных столбцов и не допускает отсутствующих значений в них. Он может состоять из нескольких столбцов. Но база проверяет выбранное техническое правило, а не самостоятельно устанавливает, относятся ли два объявления к одной реальной квартире.

Сохраняйте смысл каждого поля

Число цены нужно сопровождать валютой и основанием расчёта. Стоимость всего объекта, месячная аренда и цена за квадратный метр не являются взаимозаменяемыми величинами. Их смешение делает дальнейшие сравнения бессмысленными даже при безошибочной загрузке. Неизвестная цена отличается от нулевой. Если источник не передал поле, его нельзя автоматически превращать в бесплатное предложение. Полезно отдельно хранить признак отсутствия данных и причину, если она известна. Представим два учебных наблюдения объявления Альфа семнадцать. В первом цена равна сорока тысячам условных рублей за месяц, во втором сорока двум тысячам за месяц. Идентичность объявления сохранилась, значение поля изменилось. Если просто добавить обе строки в список текущих предложений, количество объявлений окажется завышенным. Время получения данных также отличается от времени изменения объявления. Система может увидеть старую запись сегодня. Эти даты следует различать, когда они доступны.

Заранее решите, обновлять состояние или сохранять историю

Для текущего состояния нужна одна актуальная запись на выбранный ключ. Механизм ON CONFLICT позволяет при соответствующем конфликте уникальности выполнить предусмотренное действие, например обновление или пропуск. Само его наличие не определяет, какие поля правильно менять: это часть вашей модели. Если важна история, наблюдения хранят отдельно от текущего состояния с понятными временными отметками. Повторная доставка одного и того же наблюдения не должна автоматически создавать новое событие изменения цены. Нужен способ различать новое наблюдение и технический повтор. Неудачный запрос тоже не означает, что объявление исчезло. Ошибка связи, неполный ответ и подтверждённое отсутствие являются разными состояниями. Их смешение может привести к ложному удалению записи из текущего набора. Перед загрузкой изучают документацию источника, разрешённые способы использования и ограничения запросов. Наличие API не даёт основания обходить доступ или собирать любые сведения. Для учебного проекта достаточно вымышленных записей без персональных контактов. Проверяйте результат по смыслу: сколько уникальных объявлений получилось, какие поля отсутствуют и какие изменения подтверждены. Успешная запись в таблицу ещё не доказывает качество данных.

Попробуйте на практике

Разберите три вымышленных записи на бумаге без сетевых запросов и подключения к базе.

  1. Создайте две строки для Альфа семнадцать с ценами сорок и сорок две тысячи за месяц и одну для Бета семнадцать без цены.
  2. Выберите составной ключ текущего объявления. Объясните, почему одинаковый номер из разных источников не объединяет строки.
  3. Разделите текущие значения и историю наблюдений. Укажите, как обработать повторную доставку первой строки.
  4. Отметьте неизвестную цену отдельно от нуля и запишите, почему ошибка запроса не подтверждает исчезновение объявления.

Как проверить результат. В текущем наборе остаются два объявления, изменение цены не создаёт третье объявление, а неизвестные данные не заменены выдуманными значениями.

Частые вопросы

Первичный ключ автоматически находит все объявления одной квартиры?

Нет. Он обеспечивает выбранное правило уникальности строк. Сопоставление реальных объектов требует отдельной модели и достаточных оснований.

Если загрузка прошла без ошибки, данные можно сразу сравнивать?

Сначала нужно проверить единицы, валюту, полноту и время наблюдения. Технический успех загрузки не устраняет смысловых несоответствий.

Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов