Hilfe beim Tabellen-Erstellen (ist mein Code Ok? )

sqlUser

Grünschnabel
also ich hab folgende 2 Queries ich compilier die alles ist ok:

create table termintyp2(
TermintypID int,
Termintyp2 varchar(40) default '?',
constraint TermintypID_pk primary key (TermintypID)
);​


create table termin1(
TerminID int,
Beginn date default current_date,
Ende date not null,
Termintyp2 varchar (40) default '?',
TermintypID int,
constraint TermintypID_fk foreign key (Termintyp2) references Termintyp2(TermintypID),
istVerschiebbar varchar (4) default 'ja',
check ( istVerschiebbar in ( 'ja' , 'nein')),
constraint TerminID_pk primary key (TerminID)
);




aber wenn ich dann comite dann habe ich folgendes problem:

Cannot commit transaction:
This operation is not defined for system tables.
unsuccessful metadata update.
partner index segment no 1 has incompatible data type.



Kann mir jemand sagen wo mein Fehler ist?
Und ich habe noch eine Frage, was kann ich bei firebirdserver 2.1 benutzen ist das SQL oder MySQL und gibt es da einen Unterschied?
Ich benutze IBExpert2008 und firebird_2.1

im Voraus DANKE :)
 
Moin sqluser,

die Fehlermeldung gibt doch schon den konkreten Hinweis darauf, wo das Problem liegt:
> constraint TermintypID_fk foreign key (Termintyp2) references Termintyp2(TermintypID),
---> banaler Tippfehler, der FK ist doch "TermintypID" INT und nicht etwa dieses VarChar(40)-Feld mit dem Prosatext.

Grüße
Biber
 
Oh danke Biber2,

wirklich einfach, ich habe es schon geändert, aber leider habe ich immer noch ein Problem und es heißt:

violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "TERMINTYPID_FK" on table "TERMIN1".
Foreign key reference target does not exist.

aber es existiert doch das ziel termintyp2 - Tabelle ?

Entschuldigung villeicht ist das alles Pipifax aber das ist mein erster SQL-Versuch überhaupt ich hatte vor drei Tagen noch keine Ahnung davon.

Danke für euer Verständnis. :)

Grüße
 
Also,

SQL:
create table termintyp2(
        TermintypID int,
        Termintyp2 varchar(40) default '?',
        constraint TermintypID_pk primary key (TermintypID)
        );


]create table termin1(
    TerminID int, 
    Beginn date default current_date,
    Ende   date not null,
    Termintyp2 varchar (40) default '?',
    TermintypID int,
    constraint TermintypID_fk foreign key (Termintyp2)  references Termintyp2(TermintypID),
    istVerschiebbar varchar (4) default 'ja',
    check ( istVerschiebbar in ( 'ja' , 'nein')),
    constraint TerminID_pk primary key (TerminID)
    );

Zunächst fällt mir folgendes auf :

1. Du mischt CONSTRAINTS Clauses mit Felddefinitionen. AFAIK sollen bei mySQL Constraints ans Ende. kann imch aber täuschen
2. check (istVerschiebbar in ('ja','nein')) ist bei mysql eleganter durch einen ENUM lösbarer. Kann MySQL mittlerweile CHECK-Cosntraints? bin da net auf dem laufenden.
3. Deine FOREIGN KEY Referenz ist zwischen einem VARCHAR (Termintyp2) und einer ID aufgebaut.
4. Damit diese überhaupt richtig funktionieren, musst Du eine passende Storage Engine angeben (z.b. ENGINE=INNODB ) hinter dem CREATE TABLE Statement vor dem semikolon.

Grüße
gore
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück