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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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