php мой админ отношения один ко многим - PullRequest
1 голос
/ 24 июня 2011

Я использую MySQL и PHPMyAdmin.

У меня есть три таблицы и поля в моей БД;

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, я могу выбрать только поля, являющиеся первичными ключами, из раскрывающихся списков!

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

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

:)

Тим

1 Ответ

1 голос
/ 24 июня 2011

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

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

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;
...