Несколько обнуляемый внешний ключ против нескольких таблиц ресурсов - PullRequest
0 голосов
/ 13 ноября 2018

Мы разрабатываем систему, в которой у нас есть два типа организаций: Компания и Недвижимость.И у Собственности, и у Компании есть свои собственные медиаресурсы (видео, фото), поэтому мы обсуждаем два подхода к решению этой проблемы на уровне базы данных.

Во-первых, нужно иметь одну таблицу Media, которая будет иметь внешние ключи, допускающие обнуляемые значения для обоих.Компания и Собственность

enter image description here

Вторым является то, что для Компании и Собственности у нас были бы CompanyMedia и PropertyMedia

enter image description here

Какой из этих подходов имеет больше смысла?

РЕДАКТИРОВАТЬ:

Должен быть убит за предложение решения № 2:).

1 Ответ

0 голосов
/ 13 ноября 2018

Второй подход - нет-нет, ИМХО. Атрибуты media_url и media_type должны быть уникальными в базе данных. В противном случае вы рискуете получить дубликаты и проблемы с синхронизацией.

Пример проблем с моделью №2:

  • Один носитель связан с Компанией 1. Его тип - «видео».
  • Тот же носитель (то есть URL) связан со свойством 1. Его тип - "блог".
  • Что происходит сейчас, если вы хотите получить список всех медиа и их типов? Какой бы вы взяли?
  • И вам нужно запросить 2 таблицы, что неэффективно.

Я вижу 4 таблицы здесь. Компания, Недвижимость, Медиа и МедиаТип. Тип носителя должен также иметь свою собственную таблицу, чтобы избежать дублирования.

Таким образом:

Company
    idCompany
    CompanyName

Property
    idProperty
    PropertyName

Media
    idMedia
    MediaURL
    idMediaType, FK to MediaType

MediaType
    idMediaType
    Type

И таблицы ссылок:

Property_has_Media
    idProperty
    idMedia

Company_has_Media
    idCompany
    idMedia

Модель:

enter image description here

Эту структуру я бы предложил , если один носитель никогда не связан ни с Компанией, ни с Собственностью. Из твоего вопроса это то, что я понимаю. И концептуально, СМИ не определяют связь между Компанией и Собственностью, поэтому наличие двух отдельных таблиц ссылок имеет больше смысла. Это также позволит избежать «НЕ НУЛЬ» во всех ваших запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...