MySQL:一个表中的两个外键引用另一个表

Tom*_*Tom 2 php mysql schema doctrine foreign-keys

我之前遇到过一些看起来很简单的东西,但让我再次摸不着头脑.我有一个用户表:

user_id (PK) | username| email | something
Run Code Online (Sandbox Code Playgroud)

...以及当一个用户查看另一个用户时"视图"的表格:

view_id (PK) | viewer_id | viewed_id | view_date
Run Code Online (Sandbox Code Playgroud)

"viewer_id"和"seen_id"都是user_ids,允许我分别搜索用户是查看者或正在查看的用户的实例.

我最初认为这两个列都是外键,但是我在schema.yml文件中创建了表(我使用的是Doctrine 1.2)并指定了两个独立的外部关系(每列一个),看来Doctrine只需要考虑到这两个表之间首先列出的外来关系(user_id> viewer_id).

现在让我感到困惑的是,这是正确的MySQL行为,Doctrine中的问题,还是我接近这个问题的方式有问题,或者没什么可担心的!一个表中是否有两个单独的外键映射到另一个表中的同一列?它是否合乎逻辑,因为JOIN仍然允许我通过user_id访问"视图"?我弄错了吗?

谢谢你的时间.

编辑 - 模式文件:

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
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

我们走了:你为关系指定了相同的别名.

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
Run Code Online (Sandbox Code Playgroud)

或者您以不同方式设置整个多对多关系:

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
Run Code Online (Sandbox Code Playgroud)

View应该像

View:
  columns:
    viewed_id:
      type: integer
      primary: true
    viewer_id:
      type: integer
      primary: true
Run Code Online (Sandbox Code Playgroud)

请参阅有关多对多关系的Doctrine文档.