Меня попросили создать какую-то службу отчетов (журналов). Сотрудник установил локально веб-приложение (просто какой-то динамический веб-сайт, написанный на PHP) во многих компаниях. Это веб-приложение представляет собой своего рода опрос. Все данные сохраняются в локальной базе данных, но теперь требуется, чтобы эти данные (результат опроса) также отправлялись на центральный сервер после каждой отправки формы.
Существует четыре типа опросов. Они организовали это таким образом, что существует много проектов, и каждый проект может иметь только один опрос каждого типа (здесь STI?), А опрос принадлежит одному проекту. Каждый опрос будет получать отчет из местного приложения, поэтому отчетов будет много. Приложение Rails 3, которое регистрирует эти отчеты, должно каким-то образом имитировать эту логику. Первый вопрос: имеет ли эта структура AR смысл для вас?
Project-1--------1-Survey-1-------*-Report
Project
has_one :survey
has_many :reports, :through => :survey
Survey
belongs_to :project
has_many :reports
Report
belongs_to :survey
Второй вопрос касается наличия нескольких таблиц для одной модели AR. Если все данные будут храниться в таблице отчетов
, таблица очень быстро станет огромной, и эффективный запрос отчетов, принадлежащих определенному опросу, может стать проблемой через некоторое время. Может быть, было бы лучше иметь отдельные таблицы для каждого опроса? Например, reports_
. Возможно ли это?
Кроме того, я почему-то вынужден использовать MySQL, var m = Int.MaxValue Могу ли я каким-то образом указать ELMAH вызвать нашу внутреннюю функцию дешифрования в строке подключения, которую мы ей предоставляем? Нужно ли мне изменять источник ELMAH и перестраивать?
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
</configSections>
<elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ELMAH" />
</elmah>
<connectionStrings>
<add name="ELMAH" connectionString="EncryptedConnectionString" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.webServer>
<handlers>
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
</modules>
</system.webServer>