Может быть, это может быть глупый вопрос. Итак, я создал следующую таблицу:
create table USER(
ID int NOT NULL AUTO_INCREMENT primary key,
firstname varchar(50) not null,
lastname varchar(50) not null,
password varchar(20) not null,
emailU varchar(100) not null
);
create table POST(
ID_User int,
ID_Tweet int,
primary key(ID_User, ID_Tweet),
foreign key(ID_User) references USER(ID) on update cascade on delete cascade,
foreign key(ID_Tweet) references TWEET(ID) on update cascade on delete cascade
);
create table TWEET(
ID int NOT NULL AUTO_INCREMENT primary key,
Text varchar(200)
);
Когда я вставляю что-то, например:
insert into USER (firstname, lastname, password, emailU) values ('X', 'Y', 'XY', '[email protected]');
а также
insert into TWEET (text) values ('Something');
Он корректно обновляет таблицы USER и TWEET, но таблица POST остается пустой. Зачем? Он должен быть обновлен с ID_User и ID_Tweet, или я ошибаюсь?
foreing key
- это просто ограничение, чтобы сохранить постоянство таблицы, поэтому у вас нет неправильных данных (например, сиротская почта без какого-либо пользователя). Так как MatBailie говорит, что данные не заполняются автоматически.
Вы не указали свои rdbms, но после вставки вам нужно получить идентификатор last_insert. например, на сервере Sql
Как получить последний вставленный идентификатор?
И затем вы используете его для создания новой записи на post
.
Кроме того, возможно, ваша модель слишком проста, но прямо сейчас я не вижу необходимости, чтобы у вас был стол POST
потому что новые данные не добавляют к этому отношению.
Так что лучше, если вы user_id
поле user_id
в твит
create table TWEET(
ID int NOT NULL AUTO_INCREMENT primary key,
Text varchar(200),
ID_User int,
foreign key(ID_User) references USER(ID) on update cascade on delete cascade,
);