Я использую Rails Fixtures для загрузки некоторых тестовых данных в свою базу данных и случайно ввел внешний ключ за пределы допустимого диапазона.
К моему удивлению, база данных приняла его, несмотря на ограничения ссылочной целостности (которые работают). Я пробовал с PostgreSQL и с MySQL InnoDB, и оба разрешены.
Пример:
Имея в базе данных "Ароматы" с числовым первичным ключом (id), 5 записей (от 1 до 5). Я могу ввести плохие данные:
Icecream_1: название: мое мороженое flavor_id: 6
Как возможно, что загрузка фикстур обходит ограничения моей базы данных?
Спасибо.
Вот две таблицы. Имея 200 user_types (fake data) я смог ввести пользователя с user_type_id 201 но только из фикстур, pgAdmin запрещает.
CREATE SEQUENCE user_types_id_seq;
CREATE TABLE user_types (
id SMALLINT
NOT NULL
DEFAULT NEXTVAL('user_types_id_seq'),
name VARCHAR(45)
NOT NULL
UNIQUE,
PRIMARY KEY (id));
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
id BIGINT
NOT NULL
DEFAULT NEXTVAL('users_id_seq'),
user_type_id SMALLINT
NOT NULL
REFERENCES user_types (id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (id));
---------
Fixture
<% for i in (1..201) %>
user_<%= i %>:
id: <%= i %>
user_type_id: <%= i %>
<% end %>
Как я уже сказал, и innoDb, и postgresql приняли неверный ключ.
Спасибо