Intereting Posts

MySQL: два внешних ключа в одной таблице, относящихся к другой таблице

Я столкнулся с чем-то, что казалось простым, но я снова почесал себе голову. У меня есть таблица для пользователей:

user_id (PK) | username| email | something 

… и таблицу для «просмотров», когда один пользователь просмотрел другого пользователя:

 view_id (PK) | viewer_id | viewed_id | view_date 

«Viewer_id» и «view_id» – это и user_ids, что позволяет мне искать отдельно для экземпляров, когда пользователь был зрителем или просматриваемым.

Первоначально я думал, что оба эти столбца будут внешними ключами, но создав таблицы в моем файле schema.yml (я использую Doctrine 1.2) и задал два отдельных внешних отношения (по одному для каждого столбца), кажется, что Doctrine принимает только с учетом первого зарегистрированного внешнего отношения между этими двумя таблицами (user_id> viewer_id).

Теперь я запутался, правильно ли это поведение MySQL, проблема в Доктрине или проблема в том, как я приближаюсь к этому, или не о чем беспокоиться! Может ли быть два отдельных внешних ключа из одной таблицы, сопоставленной с тем же столбцом в другой таблице? Это даже логично, учитывая, что JOIN все равно предоставит мне доступ к «представлениям» через user_id? У меня это неправильно?

Спасибо за ваше время.

EDIT – файл схемы:

 User: relations: View: {class: View, local: user_id, foreign: viewer_id, type: many, foreignType: one, alias: View, foreignAlias: User} View: {class: View, local: user_id, foreign: viewed_id, type: many, foreignType: one, alias: View, foreignAlias: User} ... only difference is viewer_id/viewed_id 

    И вот мы идем: вы указали те же самые псевдонимы для отношений.

     User: relations: viewed_by: class: View local: user_id foreign: viewed_id type: many foreignType: one foreignAlias: viewed viewed: class: View local: user_id foreign: viewer_id type: many foreignType: one foreignAlias: viewer Количество User: relations: viewed_by: class: View local: user_id foreign: viewed_id type: many foreignType: one foreignAlias: viewed viewed: class: View local: user_id foreign: viewer_id type: many foreignType: one foreignAlias: viewer 

    Или вы установили отношение «все-ко-многим» по-разному:

     User: relations: viewed_by: class: User local: viewed_id foreign: viewer_id, refClass: View viewed: class: User local:viewer_id foreign: viewed_id refClass: View Количество User: relations: viewed_by: class: User local: viewed_id foreign: viewer_id, refClass: View viewed: class: User local:viewer_id foreign: viewed_id refClass: View 

    и View должен выглядеть так:

     View: columns: viewed_id: type: integer primary: true viewer_id: type: integer primary: true 

    См. Документацию Doctrine по отношениям « многие ко многим» .

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

     mysql> CREATE TABLE test1 (id INT); Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE test3 (ref1 INT, ref2 INT, FOREIGN KEY (ref1) REFERENCES test1(id), FOREIGN KEY (ref2) REFERENCES test1(id)); Query OK, 0 rows affected (0.01 sec)