Второй подход - нет-нет, ИМХО. Атрибуты 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
Модель:
Эту структуру я бы предложил , если один носитель никогда не связан ни с Компанией, ни с Собственностью. Из твоего вопроса это то, что я понимаю. И концептуально, СМИ не определяют связь между Компанией и Собственностью, поэтому наличие двух отдельных таблиц ссылок имеет больше смысла. Это также позволит избежать «НЕ НУЛЬ» во всех ваших запросах.