проектирование таблиц базы данных с использованием JDBC - PullRequest
0 голосов
/ 13 июня 2010

Я создаю таблицу пользователей, используя JDBC и mysql, у каждого пользователя есть список разрешений, который содержит целочисленные значения.

Мне интересно, должен ли я использовать массив для хранения этих значений, а затем иметь только 1 записьдля этого пользователя в таблице или просто создайте новую таблицу, состоящую из 2 столбцов: идентификатор пользователя и разрешения, а затем создайте несколько записей для каждого пользователя, которые указывают имя пользователя в одном столбце и одно значение разрешения во втором столбце.

второй вариант представляется избыточным, поскольку значение разрешения - это простой объект, который не связан ни с какими другими объектами (например, со студентом и списком курсов, поскольку курс связан со многими другими объектами, такими как оценка)., учитель и т. д., так что в этом случае естественно иметь несколько записей), но первая кажется мне немного неестественной, поэтому, если кто-то имеет опыт с этими вещами и может направить меня к «естественному» дизайну?спасибо

Ответы [ 3 ]

2 голосов
/ 14 июня 2010

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

Рассмотрим следующие утверждения

  • Пользователь noona имеет разрешения 5, 6 и 7
  • Пользователь apc имеет разрешения 1 и 9

Кто самый мощный пользователь?Что может пользователь noona делать с разрешениями 5, 6 и 7?Что означают эти разрешения ?

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

Наличие отдельной таблицы UserPermissions - правильный выбор (независимо от того, где вы храните значение полномочий), потому что наличие одногоСтолбец для значения позволяет легко найти всех пользователей, у которых есть разрешение 4, или запросить, есть ли у пользователя noona разрешение 7.

В любом случае массивы являются неестественными.

2 голосов
/ 13 июня 2010

Если вы хотите сохранить несколько разрешений для одного пользователя, я бы правильно использовал три таблицы.Один для пользователей и один для разрешений.Это плохой дизайн для хранения нескольких данных в одном атрибуте (например, через запятую).Хранение нескольких данных предоставит вам множество ограничений.

  1. Невозможно отсортировать атрибут разумный
  2. Невозможно использовать атрибут для объединения таблиц
  3. И, вероятно, еще

пользователь

idUser
имя

разрешение

idPermission
разрешение

userPermission

idUser
idPermission

1 голос
/ 13 июня 2010

Если вы задумываетесь о том, чтобы хранить в столбце список значений, разделенных запятыми (или любой другой разделитель), это очень сильный намек на то, что вам следует использовать другую таблицу (фактически две, поскольку у вас есть многоко многим отношениям).Это не нарушает нормализацию.

При этом я видел (старые) системы, которые хранили список разрешений в виде «маски разрешений» (например, «101101»).Но я думаю, что это плохая практика, которая идет вразрез с вышеуказанным правилом и не имеет веских аргументов для его оправдания (за исключением того, что вы избегаете объединений ... которые не являются проблемой, если вы не выполняете их более 7).

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