2016-06-03 22 views
7

Desidero rendere Doctorid una chiave esterna nella mia tabella paziente.Come creare una chiave esterna in phpmyadmin

Così ho creato tutte le mie tabelle - il problema principale è che quando vado alla tabella> struttura> relazione vista solo la chiave primaria viene fuori che posso creare una chiave esterna (ed è già la chiave primaria della tabella certa che voglio mantenere - cioè il paziente della tabella del paziente è permesso di essere cambiato ma il dottore Id -Ho anche una tabella del medico- non è abilitato).

ho un altro tavolo con due chiavi composte (medicineid e PatientID) in relazione vederlo mi permette di modificare sia

Devo al caso l'indice del medico ID nella tabella paziente a qualcos'altro? entrambi non possono essere chiavi primarie in quanto l'ID paziente è il primario per il tavolo del paziente - il medico è straniero.

table

Spero che qualcuno può aiutare

Cordiali saluti

+0

Per generare una chiave esterna è necessario creare il primo indice di quel campo.Dopo aver creato un indice.Poi andare in relazione vista vedrà quel campo anche insieme alla chiave primaria. –

risposta

8

si può fare alla vecchia maniera ... con un'istruzione SQL che sembra qualcosa di simile

ALTER TABLE table_name 
    ADD CONSTRAINT fk_foreign_key_name 
    FOREIGN KEY (foreign_key_name) 
    REFERENCES target_table(target_key_name); 

Presume che le chiavi esistano già nella tabella corrispondente

+0

Ciao Jon !! La ringrazio per la risposta!! Sono nuovo nell'usare php e questo è il modo in cui ho fatto la relazione usando SQL quando ho usato Visual Studio ma volevo solo assicurarmi che lo stia facendo bene - Quindi se uso l'istruzione SQL questo creerà la chiave esterna nella tabella? dovrò apportare delle modifiche all'ID del medico della colonna nella tabella del paziente? – laurajs

+0

'ALTER TABLE Paziente AGGIUNGI CENNO fk_to_Doctorid CHIAVE ESTERA (Doctorid) REFERENZE Medico (DoctorId); '- è corretto? – laurajs

+0

Sì, le istruzioni SQL influiscono direttamente sulla struttura sottostante: PHPMyAdmin è solo un'interfaccia grafica che produce le istruzioni SQL per te. Non dovresti dover cambiare nulla nella tabella doctor_id finché è già indicizzato. Se non lo è, dovrai convertirlo in un indice come da risposta di @ Alok –

7

La chiave deve essere indicizzata per applicare il vincolo di chiave esterna. Per farlo segui i passaggi.

  1. Struttura a tavolo aperto. (2a scheda)
  2. Vedere l'ultima azione della colonna in cui sono presenti le opzioni di azione dei multipli. Fare clic su Index, questo renderà la colonna indicizzata.
  3. Apre una relazione di relazione e aggiunge un vincolo di chiave esterna.

Sarà possibile assegnare DOCTOR_ID come straniero ora.

+0

Grazie Alok! ottima risposta Sono nuovo nell'usare php quindi questo è di grande aiuto - Se scelgo di creare la chiave esterna usando un'istruzione sql - 'ALTER TABLE Paziente ADDENDENTE fk_to_Doctorid CHIAVE STRANIERA (Doctorid) REFERENZE Medico (DoctorId); 'dovrò indicizzare la colonna prima di fare questo? – laurajs

+0

No, la colonna deve essere indicizzata prima di aggiungere un vincolo di chiave esterna. È possibile aggiungere un indice usando l'istruzione MySql. Fare riferimento a questo: http://dev.mysql.com/doc/refman/5.7/en/create-index.html –

+0

Ho indicizzato e ho eseguito la dichiarazione - questo è venuto dopo - significa che ha avuto successo? - MySQL ha restituito un set di risultati vuoto (cioè zero righe). (La query ha richiesto 0.2090 sec) – laurajs

1

Quando si crea un tavolo, si può dare come segue.

CREATE TABLE categories(
cat_id int not null auto_increment primary key, 
cat_name varchar(255) not null, 
cat_description text 
) ENGINE=InnoDB; 


CREATE TABLE products(
    prd_id int not null auto_increment primary key, 
    prd_name varchar(355) not null, 
    prd_price decimal, 
    cat_id int not null, 
    FOREIGN KEY fk_cat(cat_id) 
    REFERENCES categories(cat_id) 
    ON UPDATE CASCADE 
    ON DELETE RESTRICT 
)ENGINE=InnoDB; 

e quando dopo la tabella creare in questo modo

ALTER table_name 
    ADD CONSTRAINT constraint_name 
    FOREIGN KEY foreign_key_name(columns) 
    REFERENCES parent_table(columns) 
    ON DELETE action 
    ON UPDATE action; 

Sulla scia esempio per esso.

CREATE TABLE vendors(
    vdr_id int not null auto_increment primary key, 
    vdr_name varchar(255) 
)ENGINE=InnoDB; 

ALTER TABLE products 
ADD COLUMN vdr_id int not null AFTER cat_id; 

Per aggiungere una chiave esterna alla tabella prodotti, si utilizza la seguente dichiarazione:

ALTER TABLE products 
ADD FOREIGN KEY fk_vendor(vdr_id) 
REFERENCES vendors(vdr_id) 
ON DELETE NO ACTION 
ON UPDATE CASCADE; 

Per eliminare la chiave

ALTER TABLE table_name 
DROP FOREIGN KEY constraint_name; 

Spero che questo aiuto per imparare le chiavi esterne funziona

+0

Great Yagnik grazie per tutte queste informazioni e aiuto :) – laurajs

Problemi correlati