2017-12-18 5 views
0

Vielleicht könnte dies eine dumme Frage sein. Ok, so habe ich die folgende Tabelle:Relationstabelle wird nicht aktualisiert, wenn ich Datensätze einfüge

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) 
); 

Wenn ich etwas einfügen, zum Beispiel:

insert into USER (firstname, lastname, password, emailU) values ('X', 'Y', 'XY', '[email protected]'); 

und

insert into TWEET (text) values ('Something'); 

Es aktualisiert korrekt die Tabellen USER und tweet, aber die Tabelle POST bleibt leer. Warum? Es sollte mit dem ID_User und ID_Tweet aktualisiert werden oder ich falsch?

+0

Sie müssen INSERT in Beiträge als auch der ... – jarlh

+0

Die Post-Tabelle nicht automatisch aufgefüllt bekommt, muss man es füllen. Wie sollte die DB wissen, dass die TWEET (s), die Sie gerade eingefügt haben, für welche USER sind? – MatBailie

+0

Bitte speichern Sie keine Passwörter als Klartext in Ihrer Datenbank. https://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database –

Antwort

0

foreing key ist nur eine Einschränkung, um Ihre Tabelle Konsistenz zu halten, so dass Sie nicht die falschen Daten dort haben (wie verwaist Post ohne Benutzer). Wie MatBailie sagt, werden die Daten nicht automatisch ausgefüllt.

Sie haben Ihre Rdbms nicht angegeben, aber nach dem Einfügen müssen Sie die last_insert-ID abrufen. zum Beispiel in SQL Server

How to get last inserted id?

Und dann verwenden Sie einen neuen Rekord auf den Tisch post zu erstellen.

Auch vielleicht ist Ihr Modell zu einfach, aber gerade jetzt sehe ich nicht die Notwendigkeit für Sie, die Tabelle POST zu haben, weil nicht neue Daten es der Beziehung hinzufügen.

Also besser ist, wenn Sie das user_id Feld auf den tweet

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, 
); 
Verwandte Themen