Я проектирую базу данных, в которую я буду ежедневно импортировать большой объем данных из XML для создания или обновления существующих строк.
Данные элемента охватывают десятки таблиц, связанных с item_id
в основной item
таблице
Для каждого элемента в файле XML мне нужно проверить, существует ли он уже в базе данных, и обновить или создать, если его там нет.
Каждый XML принадлежит к source_id
, и каждый элемент в XML содержит уникальный буквенно-цифровой идентификатор до 50 символов (но эти идентификаторы не уникальны для всех XML), поэтому source_id:xml_item_id
будет уникальным здесь
Мне нужен способ узнать, существует ли элемент в базе данных. В идеале я буду искать по pk и использовать тот же pk для объединения других таблиц
Попытка 1
Я пытался кодировать source_id:xml_item_id
в bigint
для pk
, а также декодировать bigint
обратно к исходному source_id:xml_item_id
, но в большинстве случаев это переполняется
Попытка 2
Используйте UUID
для pk
и source_id:xml_item_id
в качестве unique_id (string)
для поиска, но объединяйте связанные таблицы в UUID
- Хотя я не вижу в этом ничего плохого (IMO), это может повлиять на
JOINs
, и я бы предпочел числовое значение pk
для использования в URLs
Попытка 3
Используйте source_id:xml_item_id
как pk (string)
- Те же проблемы, что и с Попытка 2
Причина, по которой я избегал AI PKs
во всех попытках, заключается в том, что существует высокая вероятность ограждения этих данных в будущем, и я хотел бы, чтобы это оказало относительно небольшое влияние на то, как генерируется PKs
, когда это происходит
Как лучше всего справиться с этим?
- Чтобы определить, существуют ли элементы в базе данных
- Иметь удобный для пользователя ПК для URL
- Старайтесь не сильно влиять на производительность JOIN