2017-09-10 2 views
-3

Pour la table Epms, je veux avoir seulement 3 colonnes (departure_City_Id, arrival_City_Id, Emp_number). Cependant, quand je viens d'insérer une valeur, il est dit que j'ai 4 colonnes. L'extra pour City_Id. Tout ce que je veux, c'est éviter d'avoir une colonne City_Id dans cette table. Je le déclare parce que j'en ai besoin comme FK.Je veux avoir seulement 3 colonnes (départ_City_Id, arrival_City_Id, Emp_number). Cependant, quand je viens d'insérer une valeur, il est dit que j'ai 4 colonnes

CREATE TABLE City (
City_Id char(3), 
state varchar(30), 
Primary key (City_Id) 
); 


create table Emps (

Emp_number varchar(30) primary key, 

City_Id char(3), 

departure_City_Id char(3), 
arrival_City_Id char(3), 

FOREIGN KEY (City_Id) 
    REFERENCES City(City_Id), 

FOREIGN KEY (City_Id) 
    REFERENCES City(City_Id) 
); 
+2

J'ai supprimé la balise [tag: mysql] car le message d'erreur que vous avez reçu est une erreur Oracle. Vous n'utilisez apparemment pas MySQL. Bien que le problème soit générique, et aurait la même solution dans MySQL, FWIW. –

+0

Oui, j'utilise Oracle. Toujours avoir le même problème. Je ne peux pas insérer seulement 2 valeurs Pour départ_City_Id char (3), arrival_City_Id char (3). Je suis nécessaire pour insérer la valeur également à CITY_ID, et je ne veux pas avoir la colonne City_Id dans cette table. – Essa

+0

Vous n'êtes pas clair. Que voulez-vous dire, vous ne pouvez pas? Que faites-vous et que se passe-t-il? Que voulez-vous dire, vous êtes requis? Quelles "valeurs"? Si vous ne voulez pas de colonne, ne le déclarez pas. S'il vous plaît modifier les clarifications dans votre question, pas de commentaires. S'il vous plaît lire * any * intro aux FK, c'est une question de base de la syntaxe. – philipxy

Répondre

1

Ceci est assez simple, spécifiez simplement par ex. , FOREIGN KEY (arrival_city_id) REFERENCES city(city_id) et vous obtiendrez un index.

CREATE TABLE emps (
    emp_number   varchar(30) NOT NULL, 
    city_id    char(3)  NOT NULL, 
    departure_city_id char(3)  NOT NULL, 
    arrival_city_id  char(3)  NOT NULL, 
    PRIMARY KEY (emp_number), 
    KEY city_id (city_id), 
    KEY departure_city_id (departure_city_id), 
    KEY arrival_city_id (arrival_city_id), 
    CONSTRAINT emps_ibfk_1 FOREIGN KEY (city_id) REFERENCES city (city_id), 
    CONSTRAINT emps_ibfk_2 FOREIGN KEY (departure_city_id) REFERENCES city (city_id), 
    CONSTRAINT emps_ibfk_3 FOREIGN KEY (arrival_city_id) REFERENCES city (city_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
+0

Merci. J'ai eu ce message. KEY city_id (city_id), * ERREUR à la ligne 7: ORA-00907: parenthèse droite manquante – Essa

+0

@Essa Lisez ce qui est indiqué. Ce n'est pas une question à poser à qui que ce soit. – philipxy

+0

Vous avez étiqueté la question mysql, j'ai donc fourni une réponse MySQL valide. –

0

« Je veux est d'éviter d'avoir la colonne CITY_ID dans ce tableau. Je déclare parce que je besoin comme FK. »

Mais vous n'en avez pas besoin. Les colonnes de clé étrangère sont les arrivées et les colonnes de départ, et ce sont ceux que vous devez faire référence dans les déclarations de contrainte:

create table Emps (

    Emp_number varchar(30) primary key, 
    departure_City_Id char(3), 
    arrival_City_Id char(3), 

    FOREIGN KEY (departure_City_Id) 
     REFERENCES City(City_Id), 

    FOREIGN KEY (City_Id) 
     REFERENCES City(arrival_City_Id) 

); 

contraintes Naming est facultative, mais vous trouverez peut-être utile lors du débogage des échecs clés étrangères, en particulier lorsqu'un La table a plusieurs contraintes référençant la même clé parent.