2009-07-03 4 views
0

Рассмотрим типичный сайт социальной сети, которая имеет более или менее следующие модели:Design Решение

User 
Blog, Posts 
Forums, Topics, Responses 
Wiki, Pages 
.... 
.... 

Я хочу представить модель под названием сайта/Space, где каждый пользователь может иметь один или несколько сайтов/пространства. И я хочу предоставить владельцу сайта возможность выбрать многие функции (или назвать его приложениями/инструментами).

Каков наилучший способ дизайна этой модели - так называемая функция/приложение/инструмент?

Примечание: Во многих случаях каждая функция может отличаться от соответствующей модели. Давайте рассмотрим функцию блога, включив функцию Blog, я должен уметь ассоциировать (некоторые из них), что соответствующий сайт имеет доступ как к блогу & Сообщение (еще один пример), включив функцию «Форумы», я должен уметь связывать сайт имеет доступ не только к Форуму, но и к теме & Модели ответов. Мне нужны эти проверки, чтобы я мог определить before_filter, чтобы проверить, имеет ли конкретный сайт доступ к контенту или нет.

Я посмотрел на некоторые приложения с открытым исходным кодом, которые имеют такие функции по требованию, но, глядя на атрибуты формы, похоже, что у них есть поля has_blog, has_post, ..., заправленные в таблицу Sites, в моем ситуация может не работать, поскольку число этих моделей может расти. Вы все еще думаете, что добавление этих булевых полей в таблицу Sites - лучший подход?

ответ

0

Полиморфные ассоциации, has_many: через и/или has_and_belongs_to_many звучат как строительные блоки для вашего решения. Я бы посмотрел на них.

+0

Но добавив приложение для блога, как мне узнать, что сайт имеет доступ как к блогам, так и к почтовым моделям? – Dharam

+0

Полиморфная ассоциация. Неясно, что вы пытаетесь сделать, но для обработки ассоциации (единственного или множественного числа), которая может ссылаться на элементы нескольких типов, они, как правило, подходят для правильного пути. Я также рассмотрю вашу систему, чтобы убедиться, что вы можете упростить любые отношения. –

0

Определите взаимосвязь «многие-ко-многим» между таблицей «Приложения и сайты» в вашей базе данных.

приложения

  • AppID
  • Имя
  • ...

Сайты

  • SiteID
  • Идентификатор_пользователя
  • ...

SiteApps

  • SiteID
  • AppID

    ВЫБРАТЬ AppID FROM SiteApps WHERE SiteID = ...

Смотрите также SQL: Many-To-Many table AND query

+0

Но как я могу узнать, добавив приложение Blog, что у сайта есть доступ как к модели блога, так и по почте? – Dharam