Я использую Rails Fixtures для загрузки некоторых тестовых данных в свою базу данных и случайно ввел внешний ключ вне диапазона.
К моему удивлению, база данных приняла его, несмотря на наличие ограничений ссылочной целостности (это работает).Я пытался с PostgreSQL и MySQL InnoDB, и оба позволили.
Пример:
Наличие в базе данных «Flavors» с числовым первичным ключом (id) 5 записей (от 1 до 5).Я могу ввести неверные данные, выполнив:
Icecream_1: имя: мое мороженое flavour_id: 6
Как возможно, что загрузка осветительных приборов обходит ограничения моей базы данных?
Спасибо.
Вот две таблицы.Имея 200 user_types (поддельные данные), я смог представить пользователя с 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 приняли плохой ключ.
Спасибо