2016-06-03 110 views
7

Chcę zrobić doctorid obcego klucza w moim stole pacjenta.Jak utworzyć klucz obcy w phpmyadmin

Tak więc mam wszystkie moje tabele utworzone - głównym problemem jest to, że gdy przejdę do widoku tabeli> struktura> relacja pojawia się tylko klucz podstawowy, że mogę utworzyć klucz obcy (i jest to już klucz podstawowy z pewnej tabeli, którą chcę zachować - tzn. pacjent z Patient pacjenta może zostać zmieniony, ale lekarz Id - mam również tabelę doktora - nie jest włączona).

mam inny stolik z dwoma kluczami kompozytowe (medicineid i ID_Pacjenta) w stosunku go zobaczyć pozwala mi zmienić zarówno

Czy muszę przypadkowi indeks w tabeli lekarza ID pacjenta do czegoś innego? oba nie mogą być kluczami podstawowymi, ponieważ identyfikacja pacjenta jest podstawą tabeli pacjentów - lekarz jest obcokrajowcem.

table

Mam nadzieję, że ktoś może pomóc

poważaniem

+0

Aby wygenerować klucz obcy, musisz utworzyć pierwszy indeks tego pola. Po utworzeniu indeksu. Następnie przejdź do relacji zobacz zobaczy to pole również wraz z kluczem podstawowym. –

Odpowiedz

8

Można zrobić to staroświecki sposób ... z instrukcji SQL, które wyglądać tak

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

Zakłada się, że klucze już istnieją w odpowiedniej tabeli

+0

Cześć Jon !! Dziękuję za Twoją odpowiedź!! Jestem nowy w używaniu php i tak robiłem relację za pomocą SQL, kiedy korzystałem z visual studio, ale chciałem tylko upewnić się, że robię to dobrze - Więc jeśli użyję instrukcji SQL, utworzy to obcy klucz w tabeli? czy będę musiał wprowadzić jakiekolwiek zmiany w identyfikatorze lekarza kolumny w tabeli pacjenta? – laurajs

+0

'ALTER TABLE Pacjent ADD CONSTRAINT fk_to_Doctorid FOREIGN KEY (Doctorid) REFERENCJE Lekarz (DoctorId); '- czy to jest poprawne? – laurajs

+0

Tak, instrukcje SQL bezpośrednio wpływają na podstawową strukturę: PHPMyAdmin jest tylko interfejsem graficznym, który generuje instrukcje SQL. Nie powinieneś niczego zmieniać w tabeli doctor_id, o ile jest już zaindeksowany. Jeśli tak nie jest, musisz przekształcić go w indeks według odpowiedzi @ Alok –

7

Klucz musi zostać zaindeksowany, aby zastosować ograniczenie klucza obcego. Aby to zrobić, postępuj zgodnie z instrukcjami.

  1. Otwórz strukturę tabeli. (Druga zakładka)
  2. Zobacz ostatnią akcję kolumny, w której znajdują się opcje działań wielokrotnych. Kliknij na Indeks, spowoduje to indeksację kolumny.
  3. Otwórz widok relacji i dodaj ograniczenie klucza obcego.

Teraz można przydzielić DOCTOR_ID jako zagraniczny.

+0

Dziękuję Alok! Świetna odpowiedź Jestem nowy w używaniu php, więc jest to świetna pomoc - Jeśli zdecyduję się utworzyć klucz obcy za pomocą instrukcji sql - 'ALTER TABLE Pacjent ADD CONSTRAINT fk_to_Doctorid FOREIGN KEY (Doctorid) REFERENCJE Doctor (DoctorId); 'Czy przed rozpoczęciem tej czynności będę musiał zindeksować kolumnę? – laurajs

+0

Nie, kolumna musi być zaindeksowana przed dodaniem ograniczenia klucza obcego. Możesz dodać indeks za pomocą instrukcji MySql. Odwołaj się do tego: http://dev.mysql.com/doc/refman/5.7/en/create-index.html –

+0

Zindeksowałem i uruchomiłem oświadczenie - pojawił się później - czy to oznacza, że ​​odniósł sukces? - MySQL zwrócił pusty zestaw wyników (tzn. Zero wierszy). (Kwerenda zajęła 0.2090 s) – laurajs

1

Po utworzeniu tabeli można wykonać następujące czynności.

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; 

a gdy po stole tworzyć jak to

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

obserwuję na przykład dla niego.

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; 

Aby dodać klucz obcy do tabeli produktów, należy użyć następujące oświadczenie:

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

Dla usunąć klucz

ALTER TABLE table_name 
DROP FOREIGN KEY constraint_name; 

nadzieję, że ta pomoc, aby dowiedzieć się kluczy obcych działa

+0

Wspaniale Yagnik dziękuję za wszystkie te informacje i pomoc :) – laurajs