2016-10-25 3 views
0

У меня есть две таблицы один выглядеть:Как вставить идентификаторы из одной таблицы в другую?

id name roles 
0 admin 
1 lab 
2 user 

второй один вид:

id name 
0 xxx 
1 yyyy 
2 zzz 

И я хочу, чтобы заполнить table1.roles с некоторым идентификатором (который Choosed мной) из таблицы2.id.

Например:

id name roles 
0 admin 1,2,3 
1 lab 1,2 
2 user 1 
+5

не делаем это. НИКОГДА не добавляйте несколько отдельных значений в одно поле. вы просто закончите пинать себя позже. –

+1

Inline с marcB, я бы предложил создать таблицу User_Role (таблицу соединений) для разрешения отношений M-to-M. В новой таблице вы можете иметь Role_ID, user_ID и start/enddate, если хотите/нужно отслеживать историю. Таким образом, существует отдельная запись для роли каждого пользователя; и следует нормальному формату базы данных. сохранение нескольких значений в одном поле не соответствует нормальным стандартам и делает запросы, отчеты и рост более сложными. – xQbert

+1

вы должны создать различное перечисление для разной роли, например, 1 означает супермощность, 2 означает вторую наибольшую мощность и т. Д. – xFighter

ответ

0

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

Я хотел бы начать с ролей таблицы:

id role 
0 admin 
1 lab 
2 user 

Теперь вы всегда будете иметь в виду ту же роль из везде в вашей базе данных.

я затем переверните на пользователя таблице:

id name 
0 John 
1 Sam 
2 Rocky 

Теперь у нас есть отдельная таблица для пользователей, а также отдельную таблицу для ролей. Отсутствие риска смешивания чего-либо вместе или дублирования записей.

Объявить роли для пользователей, в очень легкой форме, мы просто обратимся к users_grants стол:

id user_id role_id 
0 1 0 
1 1 2 
2 0 1 
3 2 0 
4 2 1 
5 2 2 

В этом примере верно следующее:

Sam is an admin and an user. 
John is lab. 
Rocky is an admin, lab and a user. 

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

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

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

Я уверен, что мы поддерживаем First Normal Form здесь, чтобы обеспечить качество наших данных.

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

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