2013-09-15 2 views
0

Я создал 2 отдельные таблицы для администраторов и пользователей в моей базе данных. Я хочу сохранить данные входа пользователя и администратора (ip-адрес, user_agent, время соединения и т. Д.) В одну таблицу. Является единственным решением для создания двух полей для идентификаторов администратора и других идентификаторов пользователей в этой таблице (например, ниже)?Как сохранить данные регистрации разных пользователей в одной таблице

CREATE TABLE login_detail (
    id int NOT NULL AUTO_INCREMENT, 
    admin_id int, 
    user_id int, 
    ip_address ... 
    ... 
    PRIMARY KEY (id), 
    FOREIGN KEY (admin_id) REFERENCES admin(id) ON DELETE RESTRICT ON UPDATE RESTRICT, 
    FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE RESTRICT ON UPDATE RESTRICT 
) 

Если администратор входит в систему, его идентификатор будет храниться в admin_id и user_id будет пустым. Если пользователь входит в систему, его идентификатор будет сохранен в user_id, а admin_id будет пустым. Что вы предлагаете (вообще)?

+0

Почему бы не указать один столбец для идентификатора пользователя/администратора, а затем поле бит, указывающее, были ли пользователи администратором или пользователем? – ermagana

+0

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

+0

Аа, ты имеешь в виду таблицу пользователя и администратора ... Я отделяю их, чтобы не было путаницы. Кто-то, кто хочет добавить код, может забыть, что проверка уровня и пользователь могут выполнять операции администратора. – Mehmed

ответ

0

Я считаю, что ermagana понимал, что вы преобразовывали эти две таблицы в одну таблицу, не обращаясь к этим двум таблицам через новую третью таблицу. По крайней мере, это то, что я предполагал, пока не увидел ваш ответ. Я прав? Если так ...

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

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

Возможно, я вообще этого не понимаю. Если да, пожалуйста, уточните.

+0

Вы правы, несколько таблиц плохие ... Вы можете проверить третий комментарий выше по причине:/ – Mehmed

+0

Это еще одна причина в дополнение к нескольким, которые я предоставил. Что вы намерены делать? Вы комбинируете таблицы. –

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