2013-04-17 3 views
4

Прежде всего, я знаю, что вопрос обсуждался here и here на stackoverflow. Однако этот случай может быть другим.Проблемы с дизайном базы данных. Таблица (ы) для каждого пользователя

Позвольте мне объяснить ситуацию:

Босс хочет меня и мой коллега по разработке веб-приложений, где он может добавить клиентов (читай компании, формы теперь «пользователь»).
У каждого пользователя будет своя частная секция в приложении, где он сможет управлять своим запасом/биллингом/платежами/заказами/... У них даже есть возможность задавать разные модули/пункты меню/представления/.. для своих частных раздел.
Наш босс должен иметь возможность добавлять/удалять некоторые модули/представления/.. путем проверки опции в главном разделе управления.
И так далее ....

Моя первая мысль заключалась в том, чтобы иметь основной модуль для каждого пользователя. Моя идея была отброшена моей коллегой. Он думал, что это слишком много.
Но тогда, когда мы начали проектировать базу данных, он сказал, что хочет иметь большинство таблиц в базе данных для каждого пользователя ...
Я знал, что это была плохая практика и попытался объяснить. Однако он заявил, что было бы небезопасно, если бы мы сохранили все в тех же таблицах. (Если бы нас взломали, у них была бы не только одна компания, это данные, но и данные от ВСЕХ компаний)
Обсуждение заняло некоторое время, и в конце концов его «точка» даже убедила нашего босса его метода ,

Так как я новый парень здесь, я не хотел бы твердо стоять на этом, не зная наверняка если his statement === false

Итак, я хотел бы ваше мнение по этому поводу.

  • Как насчет безопасности
  • Как о персонализации для каждой компании
  • Как об управлении базой данных
  • ли кто-нибудь был подобный проект
  • Как об использовании различных «модулей» для каждого (как в моей первой идее)
  • ... (на самом деле вся информация, чтобы убедить их в норме, но я чувствую, что я должен с отличной альтернативой)

Заранее спасибо

+0

Итак, позвольте мне понять это, каждый пользователь должен получить свою собственную пару равных таблиц для хранения своих данных, которые в целом могут храниться в таблице, отличающейся идентификатором пользователя в строке? – dbf

+2

Я не понимаю, почему это было бы более безопасно с большим количеством таблиц. Если вас взломали, вся база данных будет доступна для хакеров с каждой таблицей. Мне кажется, это не имеет смысла. – complex857

+0

Звучит как кошмар созидания для меня ... Каждое небольшое изменение должно быть применено к каждому отдельному пользовательскому столу. Я не знаю о проблемах безопасности, но я думаю, что если кому-то удастся скомпрометировать одну таблицу, он, вероятно, также сможет скомпрометировать всю базу данных. С точки зрения дизайна базы данных это звучит просто неправильно. Безопасность не должна быть (такой большой) частью на уровне проектирования БД. Это зависит от уровня приложения, чтобы обеспечить безопасную связь с базой данных. – Quasdunk

ответ

6

Это в некоторой степени зависит от личного изменения мнения. Но некоторые вещи не являются хорошей практикой. Итак, вот мой взгляд на эти вопросы:

Наличие нескольких «пользователей» в одной таблице не должно представлять угрозу для безопасности.

  • Если у кого-то есть доступ к вашему дБ, у него есть все данные, независимо от того, где хранятся.
  • Ваше приложение должно обеспечить через отфильтрованные и проверенные условия WHERE, что пользователь может получить доступ только к его строкам, или ваше приложение будет иметь серьезные проблемы с безопасностью на других уровнях до SQL-инъекций.
  • Если у вас есть одна таблица для каждого пользователя, у вас будет много проблем в масштабировании вашего приложения для новых пользователей, управлении старыми или удалении их.
  • Производительность будет очень плохой, если вам когда-либо понадобится собирать данные от нескольких пользователей
  • Максимальное количество таблиц в большинстве БД, в зависимости от многих факторов. Я не знаю, сколько пользователей вам нужно будет хранить, но помните об этом

Решение для разделения пользователей на свои собственные таблицы звучит так, будто вы пропускаете время, необходимое для разработки надежной и надежной модели данных. Это, как правило, приводит ко многим проблемам во время поздней разработки или поддержки вашего приложения. Я бы настоятельно советовал этому.

Правило большого пальца должно всегда состоять в использовании таблицы для каждого типа объекта, а не для объекта объекта.

+0

Спасибо за ваше мнение по этому вопросу. Как насчет случая, когда вам нужно добавлять поля только для определенных «пользователей». Поскольку это беспокоило моего коллегу, я хотел бы знать, как предоставить решение для этого – Brainfeeder

+1

@Brainfeeder Если вы хотите предоставить разные поля/параметры/записи для каждого пользователя или если вы просто хотите предоставить возможность сделать это, вы должны абстрагировать эти вещи на другую связанную таблицу/модель данных, например user_table <--> user_options_table – Quasdunk

+1

Это мой совет тоже. Создайте таблицу user_id/key/value, и вы можете сохранить любое требуемое свойство. Эти таблицы также легко доступны для поиска по нескольким свойствам. Единственным недостатком является то, что вы должны сворачивать (собирать все свойства для каждого пользователя) самостоятельно, так как большинство таблиц SQL не имеют для этого методов. Если вы поворачиваете себя, делайте это на PHP, а не в БД. PHP очень быстро работает с его функциями массива. – ToBe

Смежные вопросы