#sql #database-design
#sql #database-design
Вопрос:
У меня есть рабочая база данных SQLite, которая содержит информацию о видеофайлах. Текущий дизайн такой, как показано ниже. Однако босс решил внести некоторые изменения.
В настоящее время таблица FileProperties использует имя файла в качестве первичного ключа. Однако теперь PK должен быть составным ключом как для имени файла, так и для местоположения (file), что в любом случае имеет больше смысла.
Если это будет сделано, каков наилучший способ ссылаться на этот составной ключ как на внешний ключ в других таблицах? Я думал либо о создании отдельной таблицы, которая содержит автоматически увеличивающийся первичный ключ, имя файла и местоположение. Затем PK можно использовать в качестве ссылки на внешний ключ со всеми другими таблицами.
Или сделайте имя файла и местоположение составным ключом в текущей таблице FileProperties и добавьте новое поле, которое можно использовать в качестве ссылки, и это поле должно быть автоматически увеличивающимся и уникальным в таблице.
У меня не было большого практического опыта в проектировании баз данных, поэтому любые советы по моей проблеме или моему текущему дизайну были бы очень кстати.
Комментарии:
1. Убедитесь, что ваше имя файла и местоположение достаточно большие. Если «местоположение» — это путь, то он вполне может быть больше 50. Кроме того, NVARCHAR может быть лучшим выбором для имен файлов.
2. 1 пылает. Значение NVARCHAR должно быть по умолчанию, если только не существует большой вероятности того, что потребуется гораздо большее пространство. В частности, с Oracle, где текстовые поля хранятся в виде больших объектов, которые неудобны в использовании.
Ответ №1:
Обязательно используйте автоматически увеличивающийся первичный ключ. Для обеспечения целостности данных создайте уникальный индекс по столбцам (имя файла, местоположение).
В следующей вики-статье кратко рассказывается о плюсах и минусах естественного ключа. Естественный ключ — это ключ, взятый непосредственно из данных. В вашем случае это был бы составной ключ (имя файла, местоположение). Короче говоря, естественный ключ уменьшает физическое пространство, требуемое для данных, за счет распространения изменений ключа по всем отношениям.
У меня (почти) всегда есть автоматически увеличивающийся идентификатор в таблице, даже если для использования доступен естественный ключ.
Ответ №2:
Добавьте первичный ключ FileId с автоматическим увеличением.
Добавьте уникальное ограничение для местоположения имя файла.
Избегайте использования составных первичных ключей.