2012-01-05 2 views
0

Я создаю таблицу для комментариев и одно из полей: user_id. Хорошо, что и обычный пользователь, и администратор смогут опубликовать комментарий, поэтому я не уверен, как это сделать.MySQL Поделиться user_id с таблицей пользователей и администраторами


таблица пользователей имеет первичный ключ таблицы user_id

Admins имеет первичный ключ admin_id


Так как бы я сделать это?

ответ

1

Если вы можете перепроектировать, чтобы иметь одну таблицу (login?) с флагом isAdmin, я бы сделал это.


Если вы не можете, то процесс, который заставляет каждую запись в таблице администратора создавать соответствующую запись в пользовательской таблице. Затем таблица admin может иметь поле user_id, чтобы связать эти два вместе.

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


Я бы сильно избежать комментариев в привязке к как user_id и admin_id, причем один из них держат NULL. Это сделает запросы неопрятными, препятствует принудительным ограничениям и привяжет вас к бесполезному двухкнопочному методу, если вы столкнулись с подобной потребностью в другом месте.

+0

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

+0

Где пользователи не имеют полей, которые делают администраторы, это не проблема. У вас все еще есть оригинальная запись администратора, вы сохраняете данные администратора в таблице администратора. Противоположный путь тоже должен быть управляемым, продолжайте использовать таблицу администратора, как и раньше. Это mearly, чтобы установить user_id для каждого администратора, чтобы они могли оставлять комментарии, а для таблиц нужно использовать только один внешний ключ. – MatBailie

0

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

2

почему не все пользователи и администраторы в одной таблице и имеют столбец «IsAdmin» - если пользователь админ установлен на 1, по умолчанию 0

или

ваши комментарии таблица должна иметь два колонны и либо user_id или admin_id обновляется, по умолчанию 0 - но это не хороший способ ...

+0

Я мог бы сделать это, но 90% полей, которые обычный пользователь имеет, администратор не нужен - администратору просто нужно имя пользователя и пароль. – Drew

+0

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

0

Затем вы можете сделать таблицу -Комментарии в

comment_id-int 
user_id-fk from users table or admin table 
user_type- enum('admin','user') 
comment 

// и О необходимые поля

+0

Вы не можете использовать внешний ключ для двух отдельных таблиц. У вас может быть поле, которое «вы знаете» ведет себя таким образом, но тогда вы * не можете * принудительно использовать ограничение таким образом. – MatBailie

+0

Я имел в виду внешний ключ в смысле, что он относится к любому из таблиц. Средство user_id может быть от users_table или admin_table. Колонка может иметь одно отношение. –

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