Я недавно начал работу над проектом, который включает создание веб-интерфейса отчетности для довольно старого программного обеспечения, отвечающего за управление некоторыми устройствами контроля доступа, такими как электронные дверные замки, например.
Я выбрал CakePHP для этой задачи, и все, что от него требуется - это запросить базу данных для записей журнала и отобразить их на веб-сайте. Программное обеспечение написано на C ++ и использует MSDE (уменьшенную версию Microsoft SQL Server 7.0 или 2000), и мне удалось настроить CakePHP, чтобы он успешно подключался к БД.
Проблема в том, что разработчик этого программного обеспечения решил сохранить журналы в базе данных, создав отдельную таблицу для каждого дня. Так это выглядит так:
tbl_DoorEvent_2008_08_07
tbl_DoorEvent_2008_08_08
tbl_DoorEvent_2008_08_09
tbl_DoorEvent_2008_08_10
...
Я не очень знаком с MSDE, но все еще сомневаюсь, что это приемлемая практика - проектировать и поддерживать базу данных, подобную этой. Я не знаю, как программному обеспечению для настольных компьютеров удается анализировать всю информацию, когда она находится в этом формате, но моему приложению CakePHP очень тяжело разобраться в этом.
Я хочу придерживаться MVC для веб-приложения, но я не знаю, как реализовать DooreventModel в CakePHP, чтобы он получал информацию из всех секционированных таблиц.
Я пытался реализовать некоторые хаки, такие как
UNION ALL SELECT * FROM tbl_DoorEvent_2008_08_07
UNION ALL SELECT * FROM tbl_DoorEvent_2008_08_08
....
и такого рода работы, но когда я хочу выполнить ограничение WHERE для всего запроса или любого другого оператора SQL, это не сработает.
Также одним из запросов было то, что веб-приложение не добавляет и не создает никаких дополнительных баз данных или таблиц, а использует только существующие для отображения отчетов, поэтому создание одной огромной таблицы, включающей все кластерные, на самом деле не является вариант.
Я просто надеюсь, что кто-то придумает функцию SQLServer, которая будет объединять все таблицы в одну для меня каждый раз, когда я выполняю запрос, но я знаю, что это немного оптимистично, поэтому я действительно открыт для всех предложений.
И, пожалуйста, помните, что решение должно работать с CakePHP и как отдельная модель в MVC