Я работаю над созданием базы данных, которая будет использоваться для хранения данных, которые происходят из нескольких разных источников. Для экземпляров, которые я храню, назначаются уникальные идентификаторы исходными источниками. Каждый экземпляр, который я хранил, должен содержать информацию об источнике, из которого он пришел, вместе с идентификатором, который был связан этим источником.
В качестве примера рассмотрим следующую таблицу, которая иллюстрирует проблему:
----------------------------------------------------------------
| source_id | id_on_source | data |
----------------------------------------------------------------
| 1 | 17600 | ... |
| 1 | 17601 | ... |
| 2 | 1 | ... |
| 3 | 1 | ... |
----------------------------------------------------------------
Обратите внимание, что, хотя id_on_source
уникален для каждого источника, можно найти тот же самый id_on_source
для разных источников.
У меня есть хорошее понимание реляционных баз данных, но далек от эксперта или даже опытного пользователя. Проблема, с которой я сталкиваюсь с этим дизайном, - это то, что я должен использовать в качестве первичного ключа. Кажется, что данные диктуют использование составного первичного ключа (source_id, id_on_source)
. После небольшого поиска в Google я нашел несколько ожесточенных дебатов о плюсах и минусах составных первичных ключей, но я немного смутился.
Таблица будет иметь отношения "один ко многим" с другими таблицами и, таким образом, будет упоминаться в внешних ключах других таблиц.
Я не привязан к конкретному RDBMS
, и я не уверен, имеет ли это значение для аргумента, но позвольте сказать, что я предпочитаю работать с SQLite
и MySQL
.
Каковы плюсы и минусы использования сложного внешнего ключа в этом случае? Что бы вы предпочли?