2011-06-24 1 views
1

Я использую mySQL и PHPMyAdmin.php my admin one to many relationship

У меня есть три таблицы и поля в моем блоке,

T_users; 
F_uID - varchar - (PK) 
F_Forename - text 
F_Surname - text 

T_candidates; 
F_bookingRef - int - auto increment - (PK) 
F_sessionID - int 
F_uID - varchar 

T_TrainingSessions; 
F_sessionID - int - auto increment - (PK) 
F_sessionDesc - text 
F_sessionDate - date 

Я хотел бы создать отношения один-ко-многим между T_Users.F_uID и T_candidates.F_Uid.

Я также хотел бы создать отношения «один ко многим» между T_TrainingSessions.F_sessionID и T_candidates.F_sessionID.

Однако, когда я нажимаю «вид отношения» в любом из разделов структуры таблицы в PHPMyAdmin, я могу выбирать только поля, являющиеся первичными ключами из выпадающих списков!

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

Любая помощь будет очень признательна.

:)

Tim

+0

Какой движок вы используете? Пример: InnoDB, MyISAM – Jrod

+0

Привет Jrod - я использую InnoDB – user469453

ответ

1

Вы можете сделать внешние ключи от полей, которые являются первичными ключами или поля, которые имеют уникальные значения.

Если вы не можете создать отношения

T_Users.F_uID<---->>T_candidates.F_Uid 
T_TrainingSessions.F_sessionID<---->>T_candidates.F_sessionID 
(one<---->>many) 

может быть, вы пытаетесь создать обратные отношения.

попробовать это:

CREATE TABLE T_users (
    F_uID VARCHAR(SIZE) NOT NULL, 
    F_Forename TEXT NOT NULL, 
    F_Surname TEXT NOT NULL, 
    PRIMARY KEY(F_uID) 
) 
TYPE=InnoDB; 


CREATE TABLE T_TrainingSessions (
    F_sessionID INT AUTO_INCREMENT NOT NULL, 
    F_sessionDesc TEXT NOT NULL, 
    F_sessionDate DATE NOT NULL, 
    PRIMARY KEY(F_sessionID) 
) 
TYPE=InnoDB; 

CREATE TABLE T_candidates (
    F_bookingRef INT AUTO_INCREMENT NOT NULL, 
    F_sessionID INT NOT NULL, 
    F_uID VARCHAR(SIZE) NOT NULL, 
    PRIMARY KEY(F_bookingRef) 
    INDEX FKIndex1(F_sessionID), 
    INDEX FKIndex2(F_uID), 
    FOREIGN KEY(F_uID) 
    REFERENCES T_users(F_uID) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
    FOREIGN KEY(F_sessionID) 
    REFERENCES T_TrainingSessions(F_sessionID) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
) 
TYPE=InnoDB; 
+0

Привет, Да - T_Users.F_uID всегда будет уникальным, как и T_TrainingSessions.F_sessionID. T_candidates.F_Uid и T_candidates.F_sessionID могут содержать много дубликатов. Не могли бы вы рассказать мне о процессе, который вы пройдете, если это не так уж сложно? :) – user469453

+0

Вы установили поля внешнего ключа как уникальные в phpmyadmin? Когда вы просматриваете структуру таблицы, отображаются поля, а под столбцом действия - несколько значков. Должен быть значок, который выглядит как таблица с U в ней. Убедитесь, что для полей внешнего ключа задано значение. – Jrod

+0

Привет, я вижу значок, на который вы ссылаетесь. Чтобы уточнить, вы говорите, что я должен установить T_candidates.F_Uid и T_candidates.F_sessionID как уникальный. Эти поля не содержат уникальных данных - это вызовет проблему или я что-то упущу? – user469453

 Смежные вопросы

  • Нет связанных вопросов^_^