2016-09-16 2 views
-1

Ich arbeite am Lernen SQL und versuchen, eine Datenbank zu machen, aber ich bekomme Fehler in dieser SQL, die ich nicht weiß, warum sie auftauchen.SQL Kann keine Fremdschlüsseleinschränkung hinzufügen. Ich weiß nicht, wo der Fehler ist

CREATE TABLE EMPLOYEE (
 
    Fname varchar(15) NOT NULL, 
 
    Minit char, 
 
    Lname varchar(15) NOT NULL, 
 
    Ssn char(9) NOT NULL, 
 
    Bdate date, 
 
    Address varchar(30), 
 
    Sex char, 
 
    Salary decimal(10, 2), 
 
    Super_ssn char(9), 
 
    Dno int NOT NULL, 
 
    PRIMARY KEY (Ssn), 
 
    FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE (Ssn), 
 
    FOREIGN KEY (Dno) REFERENCES DEPARTMENT (Dnumber) 
 
); 
 
CREATE TABLE DEPARTMENT (
 
    Dname varchar(15) NOT NULL, 
 
    Dnumber int NOT NULL, 
 
    Mgr_ssn char(9) NOT NULL, 
 
    Mgr_start_date date, 
 
    PRIMARY KEY (Dnumber), 
 
    UNIQUE (Dname), 
 
    FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE (Ssn) 
 
); 
 
CREATE TABLE DEPT_LOCATIONS (
 
    Dnumber int NOT NULL, 
 
    Dlocation varchar(15) NOT NULL, 
 
    PRIMARY KEY (Dnumber, Dlocation), 
 
    FOREIGN KEY (Dnumber) REFERENCES DEPARTMENT (Dnumber) 
 
); 
 
CREATE TABLE PROJECT (
 
    Pname varchar(15) NOT NULL, 
 
    Pnumber int NOT NULL, 
 
    Plocation varchar(15), 
 
    Dnum int NOT NULL, 
 
    PRIMARY KEY (Pnumber), 
 
    UNIQUE (Pname), 
 
    FOREIGN KEY (Dnum) REFERENCES DEPARTMENT (Dnumber) 
 
); 
 
CREATE TABLE WORKS_ON (
 
    Essn char(9) NOT NULL, 
 
    Pno int NOT NULL, 
 
    Hours decimal(3, 1) NOT NULL, 
 
    PRIMARY KEY (Essn, Pno), 
 
    FOREIGN KEY (Essn) REFERENCES EMPLOYEE (Ssn), 
 
    FOREIGN KEY (Pno) REFERENCES PROJECT (Pnumber) 
 
); 
 
CREATE TABLE DEPENDENT (
 
    Essn char(9) NOT NULL, 
 
    Dependent_name varchar(15) NOT NULL, 
 
    Sex char, 
 
    Bdate date, 
 
    Relationship varchar(8), 
 
    PRIMARY KEY (Essn, Dependent_name), 
 
    FOREIGN KEY (Essn) REFERENCES EMPLOYEE (Ssn) 
 
);

Jede Hilfe wäre wirklich gut sein, ich habe keine Ahnung, was

los ist falsch
+0

Welche Fehler bekommen Sie? Und verwenden Sie mySQL oder MS SQL Server (sie sind anders)? – JohnHC

+0

Ich bekomme die # 1215 - Kann keine Fremdschlüssel Einschränkung hinzufügen und mysql auf wamp –

+0

Dies ist keine gültige SQL Server-Syntax, also ich denke, das muss ich mysql? Unabhängig vom DBMS sollten Sie SSN niemals im Klartext speichern. Aber du hast gelernt, vielleicht ist das nur ein Projekt, das keine echte Anwendung ist. –

Antwort

0

Versuchen Sie, die Tabellen zunächst mit Primärschlüssel und eindeutige Einschränkungen nur zu schaffen. Danach können Sie für Fremdschlüssel erstellen, wie unten

diese Zeile in der ersten Tabellenerstellung entfernen

FOREIGN KEY (Dno) REFERENCES DEPARTMENT (Dnumber) 

Später unten Zeile hinzufügen

ALTER TABLE EMPLOYEE 
ADD CONSTRAINT FK_Employee 
FOREIGN KEY (Dno) 
REFERENCES Department(Dnumber) 
+0

Ist es wichtig, wie Sie die Einschränkung –

+0

nennen, können Sie auch den Fremdschlüssel ohne Einschränkung hinzufügen. –

1

Das Problem ist, dass Sie department von employee sind Referenzierung Tabelle und umgekehrt, aber wenn die Datenbank-Engines versucht, eine employee Tabelle zu erstellen existiert nicht gerade noch.

Um dies zu beheben, können Sie eine FK auf department Tabelle erstellen, sobald beide Tabellen erstellt.

CREATE TABLE DEPARTMENT (
    Dname varchar(15) NOT NULL, 
    Dnumber int NOT NULL, 
    Mgr_ssn char(9) NOT NULL, 
    Mgr_start_date date, 
    PRIMARY KEY (Dnumber), 
    UNIQUE (Dname) 
); 

CREATE TABLE EMPLOYEE (
    Fname varchar(15) NOT NULL, 
    Minit char, 
    Lname varchar(15) NOT NULL, 
    Ssn char(9) NOT NULL, 
    Bdate date, 
    Address varchar(30), 
    Sex char, 
    Salary decimal(10, 2), 
    Super_ssn char(9), 
    Dno int NOT NULL, 
    PRIMARY KEY (Ssn), 
    FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE (Ssn), 
    FOREIGN KEY (Dno) REFERENCES DEPARTMENT (Dnumber) 
); 

ALTER TABLE DEPARTMENT ADD FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE (Ssn); 

-- rest of script 

Hier ist ein funktionierendes SQLFiddle.

Verwandte Themen