powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Покритикуйте организацию базы данных
11 сообщений из 11, страница 1 из 1
Покритикуйте организацию базы данных
    #34853387
NUra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня всем!

Задача такая: нужно построить учетную систему (поступления, расходы + отчеты и необходимая аналитика). В системе будет работать много пользователей (ориентировочно около 1000). Каждый пользователь оперирует только своими данными, с данными других пользователей не пересекается, доступ к данным другого пользователя нужно ограничить. Как организовать базу в этом случае?
Вижу два пути:

1) Создается единая база для всех пользователей, в нее входит N таблиц, в каждой записи таблиц указано IDпользователя. Для работы с данными пользователя (мы знаем его ID) программно формируется запрос select, который фильтрует записи по ID.

2) Для каждого пользователя создается свой набор N-таблиц. Тогда зная пользователя мы работаем только с его таблицами.

У второго способа есть "-" пользователей много, поэтому таблиц тоже будет много
Но есть и "+", можно легко получить размер дискового пространства, занимаемого данными пользователя (это нужно для лимитирования пользователей); второй "+": при программировании проще организовать разделение разделение доступа к данным.
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34853416
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для каждого нового создавать новые таблицы?
Если будет СУПЕР пользователь, которому понадобится знать всю информацию? или всю некоторой группы?

Другое дело если информаций совершенно различна, пример: один вводит заказы от покупателей, другой: поступление материалов от поставщиков, третий: выпуск из производства
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34853433
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй - вообще НЕ СПОСОБ.
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34853556
NUra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В описанной задаче, пользователь никак не пересекается с другими пользователями.
Он вообще считает, что работает в системе один....

Суперпользователь может формировать запрос к нескольким таблицам сразу, т.е. к данным нескольких пользователей.
честно скажу, меня тоже второй путь смущает, т.к. приходится плодить таблицы... но что-то сказать конкретно почему так нельзя делать, у меня не получается
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34853975
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй способ:

1. Может натолкнуться на ограничение SQL-сервера на количество таблиц. Если описанная задача (поступления, расходы + отчеты и необходимая аналитика) подразумевает хотя бы десяток таблиц, то сразу выходим на 10,000 таблиц, а будет еще больше.

2. Чрезвычайно сложен в сопровождении, если нужно слегка поменять структуру БД для задачи. Скрипт на ALTER тысячи таблиц представляете? А на пятисотой он обломается (скажем, юзер в тот момент сидел в таблице, заблокировал), и имеем полтыщи таблиц одной структуры, полтыщи другой.

А вообще, в любом варианте, если это не домашняя бухгалтерия тысячи студентов, а сколько-нибудь реальные предприятия с хорошим оборотом, то я не представляю, какой нужен объем, чтобы вместить тысячу нормальных бухгалтерий, хотя бы за время в пределах срока исковой давности.
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34854043
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NUraКаждый пользователь оперирует только своими данными, с данными других пользователей не пересекается, доступ к данным другого пользователя нужно ограничить.
По опыту, я скептически отношусь к "не пересекается". Если не имеется в виду некое подчеркнутое юридическое или фактическое разделение - скажем, это не независимые люди, работающие в некоторой "веб-БД", то постепенно начинают пересекаться.

NUra1) Создается единая база для всех пользователей, в нее входит N таблиц, в каждой записи таблиц указано IDпользователя. Для работы с данными пользователя (мы знаем его ID) программно формируется запрос select, который фильтрует записи по ID.
В принципе нормальный способ, только нужно не "формируется select", а "работать через view или ХП". Это и удобнее, и надежнее.

Ну а учитывая наличие в Ваших постах Oracle-доминанты, возникает вопрос, почему Вы избегаете стандартного решения от вендора.

NUra2) Для каждого пользователя создается свой набор N-таблиц. Тогда зная пользователя мы работаем только с его таблицами.
Тоже возможный способ со своими плюсами. Однако, существующая механика СУБД мало приспособлена для работы с такими структурами. В частности, придется либо отказываться от хранимого кода, либо тысячекратно его копировать (по сути, организовывать отдельные базы для каждого пользователя). В полном пролете окажется кэш запросов, да и кэш данных будет не столь эффективен. Сервер будет ставить блокировки, которые никто никогда не будет ждать. Запросы "ко всем данным" станет писать весьма тяжело.

В общем - я бы задумался об этом способе только если бы обнаружил серьезные минусы в подходе номер 1.
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34854169
NUra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
планируется в качестве СУБД - MySQL

спасибо всем за обсуждение!
а так вообщем я сам склонился к варианту 1, но пока окончательно решение не принял... возможно есть путь №3 ?
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34854257
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> возможно есть путь №3 ?

Конечно. И для начала нужно задачу нормальным образом сформулировать. Также есть путь номер четыре: использовать готовые решения.
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34854347
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34855834
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительВторой - вообще НЕ СПОСОБ.+1
Вместо кутерьмы с набором таблиц таблицами для каждого пользователя лучше сделать одну общую таблицу со столбцом, содержащим идентификатор пользователя. Ну или каким-то образом реализовать row-level security, если полномочия на доступ к каждой строке необходимо задавать сложным образом.
...
Рейтинг: 0 / 0
Покритикуйте организацию базы данных
    #34856052
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-й вариант фтопку. Чушь полная. Как такое могло придти в голову ??????
Разрулить права на уровне отдельных строк - простая задача (на стороне клиента).
Разрулить в СУБД сложнее, но тоже можно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Покритикуйте организацию базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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