Правильная модель для базы данных с таблицей для каждого пользователя - PullRequest
2 голосов
/ 15 марта 2010

Какая-то застряла здесь ... У меня есть приложение, позволяющее, скажем, 5000 строк данных на пользователя, и мне было интересно, правильно ли это было делать так:

При создании учетной записи пользователя создается новая таблица (UserData_ [UserID])

или я должен просто иметь 1 таблицу для userdata и иметь там все со столбцом для userid?

Причина, по которой я застрял на данный момент, заключается в том, что кажется, что NHibernate не может быть сопоставлен с динамическими именами таблиц без создания другой ISessionFactory, которая имеет много служебных данных AFAIK.

Любая помощь будет принята с благодарностью.

Спасибо.

Ответы [ 4 ]

10 голосов
/ 15 марта 2010

Дорогой Бог НЕТ , это неправильный путь.Не создавайте таблицу для каждого пользователя.

Чтобы знать, что именно делать, нам нужно знать, что находится в 5000 записях.

Если, например, у каждого пользователя есть 5000 виджетов,поместите имя пользователя и идентификатор пользователя в одну таблицу, а все виджеты (каждый с идентификатором пользователя) - в другую.

4 голосов
/ 15 марта 2010

Одного стола достаточно. 5000 строк на пользователя, 100 000 пользователей ТОЛЬКО будут 500 000 000 строк - и это не так уж много по стандартам SQL;)

В общем случае схема БД должна быть как можно более статичной.

1 голос
/ 15 марта 2010

Не используйте разные таблицы для одного типа объекта. Используйте одну таблицу для всех пользователей, и тогда у вас даже не возникнет проблема динамически создаваемых таблиц. Постарайтесь представить, насколько сложно будет запрашивать ваши данные и насколько нелогично запрашивать 5000 таблиц, чтобы получить всех пользователей.

1 голос
/ 15 марта 2010

Один тип сущности, одна таблица.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...