SQL - дизайн для связывания списка вещей со строкой - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть база данных.В одной таблице каждая строка должна содержать список пользователей, связанных с этой строкой.Какой лучший способ сделать это?У меня есть следующие варианты:

1) иметь один столбец «users_id», который является индексом в таблице «users», в которой есть несколько записей на один идентификатор, по одному для каждого пользователя.Недостатком является то, что мне нужно дополнительное соединение, а преимуществом - гибкость.Пользователей будет мало, но много-много строк, так стоит ли дополнительное объединение?

2) У всех идентификаторов пользователей степень двойки.Поле «пользователи» является побитовым ИЛИ из них.Кажется, проще, и мне не нужно больше 32 пользователей, но можно ли быстро / выполнимо объединять битовые AND?

3) Просто создайте отдельного пользователя для любой комбинации пользователей.Вроде как 2) кроме менее умных.

Ответы [ 3 ]

4 голосов
/ 07 декабря 2010

Делай это правильно. Побитовое поле предотвратит любую полезную индексацию для этого столбца.

У вас должна быть таблица ассоциации, которая содержит строку для каждой вашей комбинации. Задача базы данных - обеспечить хорошую производительность запросов, она будет делать это с помощью хорошо структурированных таблиц. Не беспокойтесь о дополнительном соединении здесь или там, но вместо этого нормализуйте данные правильно и дискретно.

2 голосов
/ 07 декабря 2010

alt text

1 голос
/ 07 декабря 2010

Вы не предоставили много информации о назначении данных. Я обычно делаю что-то вроде этого:

Table:      User_RowEntry_Assignment
UserId:     int
RowEntryId: uniqueidentifier

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

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