В настоящее время я самостоятельно учу себя mySQL, и я столкнулся с проблемой при вставке новых строк в свою базу данных продаж.Ошибка MySQL с проверкой внешнего ключа
Каждый раз, когда производится продажа продукта, в базу данных продаж добавляется новая строка, в которую входит идентификатор покупателя (внешний ключ из таблицы пользователей) и имя покупателя (внешний ключ из таблицы пользователей).
Однако моя проблема заключается в следующем. Если я вставляю новую запись в таблицу продаж для пользователя с id=10
, и я неправильно вводим name='Peter Smith'
вместо name='Roger Smith'
, он успешный, хотя 'Peter Smith'
- это не имя человека с id=10
в таблице пользователей.
Может ли кто-нибудь указать мне в направлении, где я поступил неправильно? Большое спасибо.
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`dob` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB
CREATE TABLE `sales` (
`salesid` int(11) NOT NULL AUTO_INCREMENT,
`productname` varchar(30) DEFAULT NULL,
`productprice` decimal(10,0) DEFAULT NULL,
`quantity` int(11) DEFAULT NULL,
`userid` int(11) NOT NULL,
`user_name` varchar(30) DEFAULT NULL,
PRIMARY KEY (`salesid`),
KEY `FK_sales` (`userid`),
KEY `FK_name` (`user_name`),
CONSTRAINT `FK_name` FOREIGN KEY (`user_name`) REFERENCES `users` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_sales` FOREIGN KEY (`userid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
Фактически таблица продаж и таблица пользователей не находятся даже в 1NF, потому что в ней нет никакого натурального ключа. – nicomp