Несколько владельцев для фотоальбомов – вопрос по схеме

Как мне создать отношения для фотоальбомов, принадлежащих пользователю, событию, группе, сети, странице (я хочу поддерживать x возможных владельцев)? Если возможно, даже позже поддержите нескольких владельцев.

Один из способов - иметь столбцы в таблице альбомов для них, один из которых имеет идентификатор FK, а остальные - нулевые. Но проблема в том, что когда я добавляю больше типов владельцев, мне приходится продолжать изменять таблицу, чтобы добавить больше столбцов.

Другой способ — иметь отдельные таблицы фотографий для каждого из этих типов владельцев.

Ни один из этих методов не масштабируется. Любые другие методы владения фотоальбомами для разных типов владельцев из одной таблицы, которая будет масштабироваться (имеется в виду меньше соединений и легкость запросов, поскольку производительность чтения - мое требование №1?

Платформа MySQL/PHP.


person Cory    schedule 14.01.2011    source источник


Ответы (2)


Подумайте о своей проблеме в концептуальной модели данных, а не в чисто физической. Если вы выполняете объектно-ориентированную работу, это тоже нормально. CDM

Полукруг является оператором наследования. Таким образом, событие, пользователь, сеть и страница наследуются от владельца.

Когда вы сгенерируете это в физическую модель, вы будете использовать эти настройки.

альтернативный текст

Таким образом, вы получите одну таблицу всего, что может владеть фотографией и всеми общими атрибутами. Затем каждая дочерняя таблица унаследует PI от родительской и будет иметь специфичные для нее атрибуты. FK таблицы фотографий перейдет к таблице Owner.

Ваша будущая цель многих владельцев для фотографии изменится с идентификатора владельца как FK в таблице фотографий на таблицу сопоставления «многие: ко многим» между владельцем и фотографией. Действительно легко, если вы используете эти конструкции.

person Stephanie Page    schedule 14.01.2011

Создайте таблицу с тремя столбцами, FK альбома, FK владельца и типом владельца, при этом тип владельца является перечислимым типом для пользователя, даже группы и т. д.

person Kyle Heironimus    schedule 14.01.2011
comment
Вот и вопрос владельцу FK - куда он денется FK? Таблица пользователей, таблица событий, таблица страниц и т.д.? Насколько я знаю, мы можем использовать FK только для одного столбца в таблице или можем ли мы использовать FK для нескольких таблиц из 1 столбца? - person Cory; 14.01.2011
comment
Это один FK за стол. Код определит по типу, какой из них должен быть установлен. - person JOTN; 14.01.2011
comment
Что сказал ДЖОТН. Например, если один альбом принадлежит пользователю 1, а другой — группе 1, то FK владельца обеих записей будет равен 1. Однако поле типа для первого будет соответствовать пользователю, а второму — группе. - person Kyle Heironimus; 15.01.2011
comment
Я понимаю это, но я все еще не понимаю, как поставить ограничение FK. Что входит в ?: КЛЮЧ owner (owner), ОГРАНИЧЕНИЕ OwnerAlbums ВНЕШНИЙ КЛЮЧ (owner) ССЫЛКИ ? (?) НА КАСКАД ОБНОВЛЕНИЯ - person Cory; 15.01.2011
comment
Вы не можете использовать ограничения с этим методом. См. stackoverflow.com/questions/441001/ для более подробного ответа и возможных альтернатив моему решению выше. - person Kyle Heironimus; 15.01.2011