SQL независимая таблица разрешена в структуре базы данных? - PullRequest
1 голос
/ 11 декабря 2011

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

Но сегодня мой профессор сказал мне, что невозможно / неправильно иметь эту таблицу в качестве независимой таблицы, и она должна иметь связь с другими таблицами, в противном случае это неправильно.

Теперь я не могу помочь, но это потому, что таблица независима просто потому, что цель этого состоит не в том, чтобы иметь связь с другими записями / таблицами.

я прав или нет? и, пожалуйста, объясните.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Таблица попыток входа в систему заполняется, когда пользователь пытается войти, но не удается. и он в первую очередь зависит от IP-адреса пользователя, поэтому, если пользователь не сможет получить правильный пароль n раз, в таблице будет n записей, и доступ будет заблокирован на x минут. Это цель стола, но почему-то мой ERD подвергся критике моего профессора за то, что он стоял за столом в одиночестве (и мне сказали: «Я никогда не видел ОДИН столик в одиночестве за все годы, что я работал в этой области»), и я все еще не был уверен, прав ли он. Вот структура таблицы:

CREATE TABLE IF NOT EXISTS `login_attempts` (
  `ip` varchar(20) DEFAULT NULL,
  `attempts` int(11) DEFAULT '0',
  `lastlogin` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

и каким-то образом, хотя он не мог объяснить, как, он хотел, чтобы я связал это с таблицей пользователей. теперь это неправильно?

Ответы [ 4 ]

2 голосов
/ 12 декабря 2011

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

Однако в случае, указанном выше, я считаю, что вы должны сохранить имя пользователя и пароль в таблице Login_attempts. Затем создайте таблицу ссылок, чтобы присоединиться к таблице, в которой хранится имя пользователя. Таким образом, вы можете легко увидеть, если определенное имя входа скомпрометировано (вы получаете тысячи попыток, используя его и от нескольких IP-адресов), так что человек может быть извлечен, чтобы изменить его. Вы также можете идентифицировать те IP-адреса, которые пытаются использовать поддельные имена пользователей, а также те, которые, кажется, не знают правильный пароль. Это может очень помочь в поиске определенных IP-адресов, которые вы хотите запретить пытаться войти в вашу систему. Соединение с реальными пользователями может помочь вам понять, происходят ли неудачные попытки с разных IP-адресов, чем с хорошими именами входа.

2 голосов
/ 11 декабря 2011

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

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

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

Для получения справки по этому вопросу вам следует ознакомиться с документацией mysql по Ограничения внешнего ключа в InnoDB (как вы, кажется, используете InnoDB).

1 голос
/ 11 декабря 2011

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

create table failed_logins (
  ip_address inet not null,
  failed_at timestamp not null default current_timestamp,
  primary key (ip_address, failed_at)
);

Таблица, подобная этой, будет "всем ключом" и будет в 5NF.Это не имеет отношения к другим таблицам.

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

1 голос
/ 11 декабря 2011

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

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