мы производим программное обеспечение для управления участниками грантов, предоставляемых некоммерческим организациям.(например, если вашей семье нужны талоны на питание, то этот офис должен каким-то образом отслеживать вашу семью и отчитываться перед государством)
До сих пор мы фокусировались на одном особенно сложном гранте.Сейчас мы хотим расширить на другие гранты.Нашей первой целью был довольно упрощенный грант.Код для этого был просто навален на старое приложение.Теперь мы решили, что лучше всего разделить две программы (потому что не у всех наших клиентов есть оба гранта).В теории это звучит просто.
Мы можем довольно легко справиться со сложностью кода, вызванной этим, с помощью функции объединения патчей и SVN.Что гораздо сложнее, их база данных одинакова.Два гранта имеют несколько таблиц и несколько процедур.Но это довольно большая устаревшая база данных (более 40 таблиц, сотни хранимых процедур).
Каков наилучший способ разделить эти две базы данных, но при этом разделить их общие элементы?Мы не обеспокоены конфликтами между двумя приложениями, записывающими в одну и ту же БД (у нас есть блокировки для этого), а скорее нас беспокоят конфликты схем при разработке и обновлении серверов наших клиентов и управлении сложностью.
У нас есть несколько вариантов, о которых мы думали:
- Использование схем (shared, grant1, grant2)
- Использование префиксных имен