Отношения между двумя столами? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть таблица visitors и таблица users.Каждый посетитель может быть создан только одним пользователем и содержит поле visitors.userId.

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

Я создалтретья таблица events_log для регистрации действий, таких как редактирование / удаление:

Посетители_log

id | userId | visitorId | action

В этой таблице хранится информация о пользователе, который выполнял действия над таблицей visitors.

Какая связь должна быть между таблицей visitors_log и двумя остальными: users и visitors?

Теперь у меня есть эта схема БД:

enter image description here

Мое мнение таково: visitors_log может иметь один или несколько рядов.Так что отношения один ко многим.В то же время visitors_log может содержать один или несколько пользователей.Так где я не прав?Теперь это отношение один к одному.

1 Ответ

0 голосов
/ 19 февраля 2019

Есть ли вероятность того, что user_id посетителя когда-нибудь может измениться?

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

В MySQL:

CREATE TABLE visitors_log (
    idVisitorLog INT AUTO_INCREMENT,
    idVisitor    INT NOT NULL,
    idUser       INT NOT NULL,
    action       VARCHAR(100) NOT NULL,
    date_action  DATETIME NOT NULL,
    PRIMARY KEY (idVisitorLog),
    FOREIGN KEY (visitor_log_idVisitor) REFERENCES visitors(idVisitor),
    FOREIGN KEY (visitor_log_idUser)    REFERENCES users(idUser)
);

PS: вы, вероятно, тоже хотите столбец даты в таблице журнала, добавил яone.


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

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