2016-06-03 3 views
7

Я хочу сделать врачом внешний ключ на моем столе пациента.Как создать внешний ключ в phpmyadmin

Итак, у меня есть все мои таблицы - основная проблема заключается в том, что когда я перехожу в представление таблицы> структура> отношение, появляется только первичный ключ, который я могу создать внешний ключ (и это уже первичный ключ определенной таблицы, которую я хочу сохранить, - то есть пациент пациента может быть изменен, но у врача Id - у меня также таблица врача - не активирована).

Я еще одна таблица с двумя составными ключами (medicineid и patientid) в отношении его просмотра позволяет мне изменить и

ли у меня шанс на индекс врача ID в таблице пациента к чему-то еще? оба они не могут быть первичными ключами, поскольку идентификатор пациента является основным для таблицы пациентов - врач является иностранным.

table

Я надеюсь, что кто-нибудь может помочь

Сердечные приветы

+0

Чтобы создать внешний ключ, вам нужно создать первый указатель этого поля. После создания индекса. Затем перейдите к представлению отношения. будет видеть это поле вместе с первичным ключом. –

ответ

8

Вы можете сделать это по старинке ... с помощью оператора SQL, который выглядит примерно так

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

Предполагается, что ключи уже существуют в соответствующей таблице

+0

Привет, Джон !! Спасибо за ваш ответ!! Я новичок в использовании php, и именно так я использовал отношения, используя SQL, когда я использовал визуальную студию, но просто хотел удостовериться, что делаю это правильно. Итак, если я использую оператор SQL, это создаст внешний ключ в таблице? должен ли я внести какие-либо изменения в идентификатор врача колонки на столе пациента? – laurajs

+0

'ALTER TABLE Пациент ADD CONSTRAINT fk_to_Doctorid ИНОСТРАННЫЙ КЛЮЧ (Doctorid) ССЫЛКИ Доктор (DoctorId); '- это правильно? – laurajs

+0

Да, SQL-выражения напрямую влияют на базовую структуру: PHPMyAdmin - это просто графический интерфейс, который создает для вас SQL-инструкции. Вам не нужно ничего менять в таблице doctor_id, если она уже проиндексирована. Если это не так, вам нужно превратить его в индекс в соответствии с ответом @ Alok –

7

Ключ должен быть проиндексирован для применения ограничения внешнего ключа. Для этого выполните шаги.

  1. Открытая структура стола. (2-я вкладка)
  2. См. Последнее действие столбца, где есть варианты множественного действия. Нажмите на Индекс, это приведет к индексированию столбца.
  3. Открыть представление отношения и добавить ограничение внешнего ключа.

Теперь вы можете присвоить DOCTOR_ID как иностранный.

+0

Спасибо, Алок! отличный ответ. Я новичок в использовании php, поэтому это отличная помощь. Если я захочу создать внешний ключ с помощью оператора sql - 'ALTER TABLE Patient ADD CONSTRAINT fk_to_Doctorid ИНОСТРАННЫЙ КЛЮЧ (Doctorid) ССЫЛКИ Доктор (DoctorId); 'должен ли я индексировать столбец, прежде чем делать это? – laurajs

+0

Нет. Столбец должен быть проиндексирован перед добавлением ограничения внешнего ключа. Вы можете добавить индекс, используя заявление MySql. Обратите внимание: http://dev.mysql.com/doc/refman/5.7/en/create-index.html –

+0

Я проиндексировал и запустил утверждение - это произошло после того, как это означает, что он был успешным? - MySQL вернул пустой набор результатов (т. Е. Нулевые строки). (Запросов занял 0.2090 сек) – laurajs

1

При создании таблицы, которую вы можете дать, как показано ниже.

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; 

и когда после таблицы создать как этот

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

Следуя примеру для него.

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; 

Чтобы добавить внешний ключ к таблице продуктов, можно использовать следующее заявление:

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

опускного Ключом

ALTER TABLE table_name 
DROP FOREIGN KEY constraint_name; 

надеюсь, что это поможет узнать внешние ключи работы

+0

Великий Ягник благодарит вас за всю эту информацию и помощь :) – laurajs