powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разработка БД в MS SQL Server включающая несколько организаций.
21 сообщений из 21, страница 1 из 1
Разработка БД в MS SQL Server включающая несколько организаций.
    #32963446
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разрабатывая базу данных в SQL Server возник интересный вопрос. Она представляет собой работу с бухгалтерией. Но т.к. в ней будут заложены одновременно бухгалтерия по нескольким организациям, то как лучше сделать?
1) Делать одинаковые копии базы для каждой организации (один SQL Server(Instance) – одна фирма)
2) Делать одинаковые копии базы для каждой организации (все на одном SQL Server (Instance), но названия баз будут зависеть от названия фирмы)
3) Первый или второй способ, но хранимые процедуры вынести отдельно(т.е. они не будут дублироваться)
4) Сгруппировать все в одну базу и в каждой таблице сделать идентификатор принадлежности к каждой организации.

Но у каждого способа есть недостатки:
У первого и второго способа:
- Дублируются справочники
- Дублируются представления
- Дублируются хранимые процедуры

У третьего способа:
- Дублируются справочники
- Дублируются представления
- Усложняются хранимые процедуры

У четвертого способа:
- Усложняются хранимые процедуры
- Усложняются представления
- Увеличивается время обработки данных т.к. в одной таблице будут представлены данные по всем организациям.

Основной задачей данного вопроса является уменьшение дублируемых элементов. И при желании легкого разделения базы по фирмам.

Возможно есть еще какие-то варианты о которых я не догадываюсь. Но какие? Можете мне подсказать направление, в котором мне думать???

Заранее благодарю за ответ.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32963502
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал на уровне одной базы. Да действительно немного усложняется, схема, логика, но на время обработки это должно сказываться в меньшей степени, все конечно зависит от объемов,но все же....
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32963517
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Четвертый вариант однозначно, дабы исключить дублирование чего-либо. А лишнее поле в таблицах и условие в запросах - никому еще особенно сильно не вредило.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32963939
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще недостатки, если речь идет о MS SQL 2000:
2-й и 3-й способ. Имена баз данных в процедурах не могут быть переменными.
Поэтому такая организация проста не возможна (если не считать сплошных динамических операторов).

В моей практике использовались 1-й и 4-й способ. 1-й быстрее реализуется, но в сопровождении он сложнее. 4-й сложнее в реализации, но не намного, если об этом заботиться с самого начала. Кстати, если одно предприятие делится на самостоятельные подразделения, то эта задаче также возникает.

Пример реализации раздельного и консолидированного учета на рисунке:
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32963964
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял.то в yukon обещают аналог fgac. Тогда и там будет такие вещи просто сделать.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32964003
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32964433
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Буду думать.

Но если в будущем производить разделение базы по организациям и использовать 4-й способ, то этот процесс будет очень ужасным.

Скажите, что такое yukon и fgac...
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32964962
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новая версия MS SQL, которая должна появиться в середине этого года (причем у избранных ее партнеров она уже есть).
fine grain access control - реализация механизма контроля доступа на уровне строк
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32964972
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда Вам можно будет ничего не менять, а каждая фирма будет видеть только свой кусок данных за счет этого хитрого механизма (неявное изменение условия where по результату работы функции политики безопасности).
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32965875
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@Shtock
Да, интересный момент. Но этот механизм позволит ли одному пользователю работать с несколькими фирмами. В частности это нужно сисадмину и гл. буху.

Потом есть еще один камень преткновения.

Т.к. предполагаемая программа бухгалтерии(на клиенте) будет очень большая, включающая банк, кассу, рас. счет, материалы, основные средства, зарплату и т.д., то есть вопросы по реализации.:
1) Реализовать все задачи в одной программе или раскидать их по разным программам в зависимости от решаемой задачи. Т.е. реализовать отдельно программы «Банк», «Касса», «Материалы», «Основные средства» и т.д.

2) Т.к. база будет по нескольким фирмам, то как лучше в программе реализовать выбор фирмы?
а) Установить для каждой фирмы программу в отдельный каталог, а для какой фирмы запускается программа будет определено в файле настроек.
б) Все поместить в один каталог. Фирма, для которой запускается программа будет определена при запуске методом выбора из списка.
в) Все поместить в один каталог. Фирма, для которой работает программа будет определена в отдельном пункте меню или в каждой форме будет расположен combobox(listbox) со списком фирм для выбора(глобального для текущей программы). А запуск будет произведен по фирме, с которой последний раз работали.

3) В каждой форме будет реализован фильтр по дате документа. Как его лучше сделать?:
а) Сделать флажок фильтровать или нет. Если флажок установлен, то должны быть введены дата начала периода и дата окончания.
б) Вариант «а». Но может быть введена только одна дата. Т.е. если введены обе даты, то действует вариант «а». Если введена только дата начала, то показываются документы от указанной даты до «+бесконечной» даты. Если введена только дата окончания, то показываются документы от «-бесконечной» даты до указанной даты.
в) Вариант «б». Но вместо того чтобы не вводить даты вводится дополнительно два флажка под каждую дату. Если флажок установлен, то соответствующая дата используется.
г) Сделать выбор 2-х вариантов. Первый вариант это один из перечисленных вверху способов («а» или «б» или «в»). Второй вариант это фильтр по введенному году и месяцу(т.е. не по периодам дат, а по всему выбранному месяцу в выбранном году).
д) Сделать выбор 2-х вариантов. Первый вариант это один из перечисленных вверху способов («а» или «б» или «в»). Второй вариант это фильтр по введенному году и если установлен флажок напротив месяца, то и по выбранному месяцу выбранного года (т.е. не по периодам дат, а по всему году или если выбран месяц, то и по выбранному месяцу в выбранном году).
е) Тоже что и вариант «г». Но вводятся не дополнительные поля ввода года и месяца, а добавляется флажок «По месяцу». Если нажать на этот флажок, то дата начала периода устанавливается в первое число месяца, а дата окончания в последнее число месяца.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32965907
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С учетом того, что Youkon еще нет (ха-ха), то не знаю, что там можно. Но в Oracle пусть заходят под разными пользователями и админ и бух и что им надо видят.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32966538
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4Потом есть еще один камень преткновения.

Т.к. предполагаемая программа бухгалтерии(на клиенте) будет очень большая, включающая банк, кассу, рас. счет, материалы, основные средства, зарплату и т.д., то есть вопросы по реализации.:
1) Реализовать все задачи в одной программе или раскидать их по разным программам в зависимости от решаемой задачи. Т.е. реализовать отдельно программы «Банк», «Касса», «Материалы», «Основные средства» и т.д. Это не камень преткновения, а великолепный метод сделать систему блочной. Это дает хорошие возможности масштабирования, наращивания, и, наконец, просто значительно упрощает задачу.

StasX4 2) Т.к. база будет по нескольким фирмам, то как лучше в программе реализовать выбор фирмы?
а) Установить для каждой фирмы программу в отдельный каталог, а для какой фирмы запускается программа будет определено в файле настроек.
б) Все поместить в один каталог. Фирма, для которой запускается программа будет определена при запуске методом выбора из списка.
в) Все поместить в один каталог. Фирма, для которой работает программа будет определена в отдельном пункте меню или в каждой форме будет расположен combobox(listbox) со списком фирм для выбора(глобального для текущей программы). А запуск будет произведен по фирме, с которой последний раз работали. Правильно организовать защиту доступа к данным, и тогда любой пользователь с одного и того же ярлычка попадает на свою фирму. Только надо иметь в виду, что при работе с маленькими фирмами один бухгалтер может вести их несколько. В этому случае должна быть возможность оперативного переключения между фирмами.

StasX4 3) В каждой форме будет реализован фильтр по дате документа. Как его лучше сделать?: а) б) в) г) …Откуда эта проблема? Достаточно одного варианта. Все пользователи в бухгалтерии работают в одном отчетном периоде. И документы в подавляющем большинстве случаев отображаются за весь месяц. Поэтому в реестре документов по умолчанию ставится с 1-го по последнее число месяца и дается возможность бухгалтеру уточнить период, если это когда ни будь ему понадобится.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32966640
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@PVP

Не совсем понял что вы мне посоветовали по поводу первого вопроса. Вроду бы как я и писАл разбить задачу на несколько программ. Но я не уверен.

По второму вопросу. У нас организовалась третья фирма, и она маленькая и поэтому 2-ую и третью будет вести один бухгалтер. А все три фирмы проверяет и ведет гл. бух. И еще... Реализацией, напрмер, занимается сметный отдел и тоже по всем трем фирмам. Поэтому и возникает вопрос как именно лучше сделать выбор организации.

По третьему вопросу. Мне как раз и нужен один из вариантов, который я привел. Но какой выбрать пока не знаю. Вот залес в 1C и смотрю как у них там реализовано. Но тоже не совсем нравиться...
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32966766
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4@PVP
Не совсем понял что вы мне посоветовали по поводу первого вопроса. Вроду бы как я и писАл разбить задачу на несколько программ. Но я не уверен. Я для каждой задачи делаю свою базу данных. В бухгалтерии – это Баланс, Материалы, Партнеры, Основные фонды, Зарплата. Есть другие модули и соответственно одна база данных для них, например для экономистов Планирование, для ТЭЦ – сбыт тепловой энергии, для населения Абонслужба. Есть модуль для коммунальных платежей в банке. При этом, не смотря на различие задач, базы данных во всех модулях имеют одну и то же структуру в системной части. Короче, я поддерживаю вариант, когда за одной задачей закрепляется одна база данных.

StasX4По второму вопросу. У нас организовалась третья фирма, и она маленькая и поэтому 2-ую и третью будет вести один бухгалтер. А все три фирмы проверяет и ведет гл. бух. И еще... Реализацией, напрмер, занимается сметный отдел и тоже по всем трем фирмам. Поэтому и возникает вопрос как именно лучше сделать выбор организации. Точно не уверен, но здесь вроде бы выложена демонстрационная версия бухгалтерии, которая предназначена для работы с разными фирмами. Полный комплект (исполнящий модуль, базы данных, документация) весит около 50 M. Скачайте, установите, посмотрите. Если будет интерес, могу помочь по ICQ.

StasX4По третьему вопросу. Мне как раз и нужен один из вариантов, который я привел. Но какой выбрать пока не знаю. Вот залес в 1C и смотрю как у них там реализовано. Но тоже не совсем нравиться...Надо использовать самый простой фильтр по времени «с – по». Я знаю пару сотен пользователей, которые пользуются таким фильтром и никогда не предлагали ничего другого.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32966773
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку.
Если в меня работает бухгалтерия и с двумя фирмами, и добавилась третья, то переделки состоят в добавлении в справочник фирм (он древовидный, показан на первом рисунке) еще одной записи с названием этой фирмы. Все отчеты, баланс, операции, документы идут раздельно от других.
К стати, легко завести параллельную бухгалтерию для одной и той же фирмы. Для этого в справочнике фирм заводится запись для "чистовой" и "черновой" бухгалтерии.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32966794
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4Да, интересный момент. Но этот механизм позволит ли одному пользователю работать с несколькими фирмами. В частности это нужно сисадмину и гл. буху.
Переключаясь с одной на другую - наверняка позволит (в худшем случае потребуется скрытый реконнект).

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

StasX4Т.к. предполагаемая программа бухгалтерии(на клиенте) будет очень большая, включающая банк, кассу, рас. счет, материалы, основные средства, зарплату и т.д., то есть вопросы по реализации.:
1) Реализовать все задачи в одной программе или раскидать их по разным программам в зависимости от решаемой задачи. Т.е. реализовать отдельно программы «Банк», «Касса», «Материалы», «Основные средства» и т.д.
Что есть "программа"?

Лично я (в комбинации Oracle+Delphi) считаю наилучшим следующий подход:

- В базе выделяются группы объектов, относящиеся к той или иной задаче. Объекты - это таблицы, процедуры итп. Группы снабжаются коротким префиксом. Если группы большие - каждая кладется в свою схему, если маленькие - лежат в одной.

- В приложении делается много плагинов, каждый из которых реализует достаточно мелкую функцию. Ядро собирает плагины, строит меню итп. Плюс, плагины завязаны на роли - так что пользователю не грузятся не нужные ему модули.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32967304
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выбирайте 4 способ и недумайте ни очем.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32967317
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все оперативные доки - всегда должны содерждать признак - код фирмы.
Все справочники - могут иногда содержать признак - код фирмы.

Например - справочник товаров. Единый для всей системы, но есть не обязательная поляна - код фирмы.

Все отчеты - обязаны делать запросы когда можно юзать фильтр по коду фирмы - или игнорировать
(where cd_self = :kod_self or :kod_self is null )

А вот хранимые процедуры - им должно быть все равно....ибо они оперируют КЛЮЧОМ (регистром) документа....который не зависит от Код Фирмы.

Политика безопасности - основана на группах (фирмы, клиенты, товары, подразделения....) Группы Юзеров видят данные в пределах перечисленныъх групп.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32967787
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@PVP

Спасибо за информацию, как налажу дома выделенку, то обязательно скачаю пример.
Я думаю организовать фильтр следующим способом:
1) При запуске программы расчетный период(дата начала – дата окончания) будет определяться так:
1.1) Определение расчетного месяца и года одним из следующих способов:
- По каждой фирме на сервере будет храниться расчетный год и месяц, который можно будет изменять на клиенте через форму настройки.
- При запуске программы будет определяться текущая системная дата и по ней выдергиваться месяц и год.
1.2) Определение даты начала и окончания расчетного периода.
- Дата начала = 1/месяц/год
- Дата окончания = Дата начала+1месяц-1день
2) Расчетный период заносится в глобальные переменные.
3) При открытии формы, которая использует фильтр по дате, в ее заголовке указывается расчетный период, который берется из глобальных переменных.
4) При изменении для текущей формы расчетного периода, то он заносится в глобальные переменные и для следующей формы будет использоваться уже измененный фильтр.

Т.е. суть такова, что изначально расчетный период(R0) заключен в один месяц и определяется программой.
1) Открытие Формы №1 – RF1= R0. Если форма изменяет расчетный период, то R0=RF1.
2) Открытие Формы №2 – RF2= R0. Если форма изменяет расчетный период, то R0=RF2.
3) Повторное открытие Формы №1 – RF1= R0. Если форма изменяет расчетный период, то R0=RF1.
Но можно еще сделать и так, чтобы форма и после закрытия помнила свой расчетный период:
3) Повторное открытие Формы №1 – RF1= RF1. Если форма изменяет расчетный период, то R0=RF1.
Где,
R0 – расчетный период по умолчанию
RF1 – расчетный период для формы №1
RF2 – расчетный период для формы №2

Как вы думаете, лучше сделать с запоминанием расчетного периода или без?
Кстати, я постучался к вам в Асю.

@softwarer

На счет базы, в которой процедуры, таблицы, представления и функции с префиксами понятно. Но когда их слишком много, то в QA или в EM этот список конкретно увеличивается. И как я понял, для решения этой проблемы используются схемы. Но я не знаю что это такое и как это делается. Я, в частности, решил работать на MS SQL Server. Можете немного пояснить?

@UK0IAI
Можете пояснить как реализовать видимость в MS SQL Server?


Всем заранее спасибо за терпение и за ответы.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32967868
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4На счет базы, в которой процедуры, таблицы, представления и функции с префиксами понятно. Но когда их слишком много, то в QA или в EM этот список конкретно увеличивается. И как я понял, для решения этой проблемы используются схемы. Но я не знаю что это такое и как это делается. Я, в частности, решил работать на MS SQL Server. Можете немного пояснить?
Грубо говоря, схема - это пользователь. В Oracle, и если не ошибаюсь, в MSSQL, между этими понятиями нет разницы.
...
Рейтинг: 0 / 0
Разработка БД в MS SQL Server включающая несколько организаций.
    #32968868
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 StasX4
На счет периода, на мой взгляд, все хорошо, кроме чтения системной даты.
Пользователь может работать в одном из прошлых периодов, залезсть в будущий. Не надо его в этом ограничивать. Лишь бы не трогал закрытые периоды. Поэтому лучьше период запомнить за пользователем. Я стараюсь за пользователем запоминать все его параметры. Когда он входит в ситсему, даже из другого компьютера, у него на экране открываются все окна и с тем содержимым, при котором он в последний раз закончил работу. Это очень удобно.

Аську только окрыл. Запрос поступил.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разработка БД в MS SQL Server включающая несколько организаций.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]