Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
Проект по рассчету зарплаты.
Есть несколько абсолютно несвязанных компаний (около 50) для которых, кажущиеся на первый взгляд обобщенные данные (справочники, настройки) могут различаться (например, курс доллара для одной компании по курсу ЦБРФ, для другой - по внутреннему курсу устанавливаемому компанией, виды начислений и удержаний...)
команда на проекте небольшая (3 чел)
Склоняюсь к варианту нескольких баз, что облегчит проектирование и разработку бизнес-логики (особенно актуально в условиях небольшой команды). Если понадобится, со временем будет спроектирована и создана еще одна база с учетом множественности компаний в которую будут реплицироваться данные из всех остальных (одностороняя репликация), эта база будет использоваться для какой-либо обобщенной отчетности.
Будет еще шаблонная бд из которой на все остальные будут реплицироваться хп и жестко-общие данные.(Тут попутно возникает вопрос с репликацией хп. по-моему уже обсуждались какие то проблемы, но топик затерялся)

Минусы очевидны - обсуживание и поддержание согласованной структуры всех баз.

К плюсам можно еще добавить возможность легкого разделения баз компаний, например, можно забрать одну из баз домой, подключить к MSDE, поработать, принести обратно и реплицировать. Можно какие-либо очень большие базы перенести на другой сервер, т.е. получается гораздо более прозрачная масштабируемость.

Хотелось бы понять правильное ли направление я выбрал в данной ситуации и выслушать мнения тех кто имел опыт в проектировании архитектуры для подобных задач.

Спасибо за внимание.
16 окт 05, 15:39    [1973271]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Брюлик
Member

Откуда:
Сообщений: 690
В принципе согласен (тебе на месте многие детали более очевидны), может надо будет иметь "главную" базу в которои будет храниться ключи ко всем внешним базам и как ты сказал какие-то обшие данные.
16 окт 05, 16:46    [1973375]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
up
17 окт 05, 09:16    [1973837]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
есть сомнение, что 3 человека потянут обслуживание 50 бд...
17 окт 05, 12:11    [1974464]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
>>есть сомнение, что 3 человека потянут обслуживание 50 бд
не вопрос, возьмем отдельного DBA если понадобиться, базы по структуре однотипные и в среднем по 100Гб.
17 окт 05, 13:01    [1974767]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
например, можно забрать одну из баз домой, подключить к MSDE,


автор
и в среднем по 100Гб


???
17 окт 05, 13:07    [1974798]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
>>>???
Мб :)
17 окт 05, 13:37    [1974946]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Главное, по моему мнению, чтобы структуры баз данных, тесты хранимок и п.т. были одинаковы для всех баз. Сами данные пусть будет различными. В этом случае, исправив ошибку в хранимой процедуре, эту процедуру можно накатить на всех базах. Хуже когда в каждой базе под одним именем скрываются отличные друг от друга процедуры. Тогда для разработчиков начнется ад.
17 окт 05, 13:56    [1975044]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Роман Дынник
>>>???
Мб :)


Тады ой... IMHO, пусть это все будет в одной базе.
17 окт 05, 13:58    [1975055]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Prolog
Главное, по моему мнению, чтобы структуры баз данных, тесты хранимок и п.т. были одинаковы для всех баз. Сами данные пусть будет различными. В этом случае, исправив ошибку в хранимой процедуре, эту процедуру можно накатить на всех базах. Хуже когда в каждой базе под одним именем скрываются отличные друг от друга процедуры. Тогда для разработчиков начнется ад.

Насколько я понимаю, у автора вопроса как раз проблема в том, что обработка внешне одинаковых данных производится разными способами. То есть как раз разные процедуры по сути под одним именем.
17 окт 05, 14:19    [1975179]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
GreenSunrise
Насколько я понимаю, у автора вопроса как раз проблема в том, что обработка внешне одинаковых данных производится разными способами. То есть как раз разные процедуры по сути под одним именем.
Вот этого и неплохо было бы избежать. По моему, под одним именем должны быть абсолютно одинаковые процедуры. А если нужны разные варианты обработки данных, нужно создать разные процедуры и вызывать ту или иную процедуру в зависимости от соответствующей настройки.
17 окт 05, 14:27    [1975216]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
>>Насколько я понимаю, у автора вопроса как раз проблема в том, что >>обработка внешне одинаковых данных производится разными способами. То >>есть как раз разные процедуры по сути под одним именем

Нет, нет хп будут одинаковыми во всех БД, сложная бизнес-логика будет выноситься в другой слой, какую версию рассчетной сборки использовать, будет решаться исходя из настроек под конкретную компанию, нужные расчетные сборки будут загружаться динамически.
17 окт 05, 17:20    [1976318]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
pkarklin
Роман Дынник
>>>???
Мб :)


Тады ой... IMHO, пусть это все будет в одной базе.

Почему?
Факт появления базы компании с размером от 50 ГБ вполне реален.
Вполне может понадобиться разнесение рассчетов разных компаний по разным серверам, и по-моему все в одной тут не очень подходит. другие причины обозначены выше.
17 окт 05, 17:24    [1976352]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
с тоже зрения надежности (бэкап, и т.д) лучше хранить в отдельных базах.

А то не дай Бог у вас случайно данные одной компании попадут к другой.
17 окт 05, 22:59    [1977131]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
UK0IAI
Member

Откуда: питер
Сообщений: 13486
Роман Дынник
pkarklin
Роман Дынник
>>>???
Мб :)


Тады ой... IMHO, пусть это все будет в одной базе.

Почему?
Факт появления базы компании с размером от 50 ГБ вполне реален.
Вполне может понадобиться разнесение рассчетов разных компаний по разным серверам, и по-моему все в одной тут не очень подходит. другие причины обозначены выше.


50 баз - это значит есть СЕРЬЕЗНЫЙ повод принять волевое решение - когда ОДИН КОД обрабатывает 50 баз. Для этого надо всего три вещи:

1. все уникальные индификаторы должны включать в себя Номер Базы по формуле типа (ID *1000 + N_базы).
2. Все таблицы с оперативными данными должны иметь в себе признак Код_Базы или лучше Код_Фирмы_владельца)
2.1 Все отчеты и расчеты всегда работают в пределах фильтра по Код_Базы.

3. Все НСИ могут также иметь признак Код_Базы= Код_Фирмы_владельца
4. Первая Строка Программного Кода любого модуля всегда "определяет" Код_базы
5. Все ХП процедуры могут быть "перегружены" , когда они могут учитывать или не учитывать код базы (типа база по дефалту).
6. И конечно нужен хороший менеджер, который всегда читает мета_модель данных и узнает версии ХП , НСИ....в привязке к отдельной Базе - ЕСЛИ это оговорено в метаданных.


После этого, у вас автоматически появятся возможности для поддержки прикладной репликаций данных и/ли копирования. Можно будет "взять домой поработать" и принести обратно.
17 окт 05, 23:10    [1977145]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
>>>Все ХП процедуры могут быть "перегружены" , когда они могут учитывать >>>или не учитывать код базы (типа база по дефалту).
и как будет выглядеть такая каждая процедура?
if @numDB=1 use DB1
else
if @numDB=2 use DB2
...
exec sp
?
имхо, совсем некрасиво.
18 окт 05, 09:59    [1977584]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Templar
Member [заблокирован]

Откуда:
Сообщений: 310
Тут надо исходить из сценариев использования.
Если каждая компания будет вести свой независимый учет, то это будет фактически 50 разных приложений.
Приложение, насколько я понял, будет одно, унифицированное, а число баз, соответственно, по числу экземпяров этого приложения.
как минимум, для ДБА это удобнее - не требуется знать логику данных в единой БД. добавил клиента - создал базу. Ушел клиент - удалил базу.
18 окт 05, 18:29    [1981229]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
PVP
Member

Откуда: Украина, г.Сумы
Сообщений: 832
Зарплата сама по себе уже сложная задача. А здесь 50 разных фирм, 50Гб база и растет каждый месяц. А еще и 50 разных бухгалтеров, со своими навыками, правилами. Кроме того, ни что так быстро не меняется в бухгалтерии, как методика расчета зарплаты и составления зарплатных отчетов. Интересно еще расстояние между ними. Если они удалены территориально, то вообще класс.

Максимум, что мне приходилось делать (не одному, команде), это зарлата для ГОРОНО. Централизованная бухгалтрерия, обрабатывающая сотню школ, столько же садиков, училищ и разных спецучреждений. Сделано было на одной базе MS SQL. Работает уже четвертый год. Если бы начал делать заново, то сделал бы приблизительно так, как предлагает автор - разделил бы на части, только не для каждого подразделения, а для группы бухгалтеров, работающих рядышком (территориально). Связь с центральной базой данных средствами репликаций. Все настройки в центре, на данные в центр передаются только сводные. Там не нужны подробные сведения по каждому лицевому счету. Когда сотрудники приходят в бухгалтерию за различными справками, то их все равно направляют к тем бухгалтерам, которые ведут соответствующие школы. Конечно, работа по настройке и поддержке репликаций не элементарная. Но не простая задача и избежать блокировок при работе трех десятков бухгалтеров на одну большую общую базу. Особенно, если функционал на хранимых процедурах.

Самое страшное в работе с такой зарплатой, это сделать ошибку в процедуре, типа delete без услувия. Как они ругаются ...
18 окт 05, 20:04    [1981521]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
UK0IAI
Member

Откуда: питер
Сообщений: 13486
Роман Дынник
>>>Все ХП процедуры могут быть "перегружены" , когда они могут учитывать >>>или не учитывать код базы (типа база по дефалту).
и как будет выглядеть такая каждая процедура?
if @numDB=1 use DB1
else
if @numDB=2 use DB2
...
exec sp
?
имхо, совсем некрасиво.


примерно так

procedure GET_DATA ( p_par number....) is
begin
      GET_DATA (null, p_par number....);   
      ......
      ИЛИ 
      --
      -- ТАК ЛУЧШЕ однозначно.
      GET_DATA (default_код_база, p_par number....);   
      --

end;

procedure GET_DATA (p_код_база number, p_par number....) is
begin
      SELECT .....
      FROM .......
      WHERE (КОД_БАЗА =  p_код_база OR p_код_база  IS NULL);
      ..
end;

то есть если код_базы явно не задан то всегда юзается база по дефалту.

но я бы на это не пошел, наверно. Возможно эта тема справедлива к НСИ...чтобы не дублировать справочники тупо....Да, не пошел бы ...никогда.

Хотя, можно в ИНТЕРФЕЙСЕ...в ЗАГОЛОВКЕ ОКНА...ВСЕГДА отражать типа режим работы....дескать БАЗА по Дефалту (например - НСИ по дефалту) или что там конкретно....
18 окт 05, 20:57    [1981635]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
mma_s
Member

Откуда: Красноярск
Сообщений: 471
День добрый.

На мой взгляд, при таком количестве предприятий основные проблемы будут не в поддержании общих справочников ( курс доллара для одной компании по курсу ЦБРФ и т.п.) - это задача решаемая, а в реализации требований к расчету з.п. от каждого предприятия в рамках одной БД. Ведь там не только начисления могут различаться - есть еще и удержания, всевозможные вычеты, таблицы входимости видов оплат, у этих предприятий могут сильно различаться системы олаты труда, количество аналитических категорий и т.д.

Если решите делать одну БД - будьте готовы к тому, что внесения даже небольших изменений в настройках для одного предприятия "случайно" заденут остальные..

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

В итоге, на мой взгляд одну БД можно сделать, если положения об оплате труда и методика расчета на всех предприятиях идентичны - а такое вряд ли возможно, если только они все не являются дочерними предприятиями какого-нибудь крупного.

И еще, 3 человека на такой проект, даже плюс один админ - маловато будет, если в этих предприятиях больше 10 человек работает :))

Если не секрет, на чем планируете реализовывать систему?
4 ноя 05, 13:13    [2038285]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
.net и mssql
7 ноя 05, 09:41    [2041165]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Одна база или несколько  [new]
То Же
Guest
и у нас аналогично - выбор между 1-й большой базой и в ней таблица "КлиентЫ" или на каждого клиента своя база :)

1. Роман Дынник, какой вариант выбрали? С какими трудностями столкнулись? Вообще, "пациент" скорее жив или мёртв? :)

2. ALL, какие у кого есть мысли по данной задаче спустя 4 года? (у нас, если будет 1 база, то её размер будет под 500Гб)

Спасибо
12 сен 09, 19:26    [7651292]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
То Же
2. ALL, какие у кого есть мысли по данной задаче спустя 4 года? (у нас, если будет 1 база, то её размер будет под 500Гб)
Если по-простецки - то сделать одну базу. А если подумать - то можно и разнести по нескольким. От ситуации зависит сильно.
12 сен 09, 19:52    [7651325]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Glamorama
Member

Откуда:
Сообщений: 152
Если сделать одну базу,то:
- плюсы
1) единая база для всех клиентов с единой структурой. Любое изменение для одной, становится доступно для всех остальных за минимальное кол-во шагов;
2) отсутствие проблем с синхронизацией.
- минусы
1) домой такую базу скорее всего не возьмешь;
2) весьма вероятно возникновение проблем с блокировками и быстродействием (нужны спецы по базам данных);
3) понадобится с нуля писать алгоритмы синхронизации между базами, если все-таки придется развалить базу на части;
4) сложная структура базы;
5) необходима система разграничения прав доступа.

Если сделать 50 баз, то:
- плюсы
1) можно разнести на разные сервера для распределения нагрузки;
2) изменения для одной компании не влияют на работу других;
3) упрощается структура каждой базы в отдельности;
4) нет блокировок при работе разных компаний;
5) минимум проблем с разграничением прав доступа.
- минусы
1) если у компаний меняются алгоритмы расчета, то придется наворачивать каждую базу по отдельности (а иногда и делать по несколько раз одно и тоже для разных компаний) - сложно сделать переносимые решения.

Не зная реальной ситуации, сложно определиться с тем, какой вариант выбрать.
13 сен 09, 00:34    [7651798]     Ответить | Цитировать Сообщить модератору
 Re: Одна база или несколько  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
То Же,
спустя 4 года всё живое, разумеется :)
на каждую компанию - своя база - имхо, это на 100% было правильное решение. Более того, слышал что некоторый коллектив, который занимался подобной задачей и делал одну бд, в новой версии ядра решили таки делать отдельные бд на каждого клиента. видимо на это были какие то причины...
14 сен 09, 00:12    [7653274]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить