2014-08-29 66 views
0

我有一些表格其中这3个数据库:如何自动将外键添加到选择的表上,哪个表存储在关联的其他表中?

organizations 
    organization_id PK 
teams 
    team_id PK 
    team_organization_id FK 
users 
    user_id PK 
teams_users 
    tu_id PK 
    tu_team_id FK 
    tu_user_id FK 

所以:

  • 队属于组织
  • 组织有许多球队
  • 用户拥有属于很多球队
  • 团队拥有并且属于许多用户

而且,因此用户必须属于唯一组织。当我选择一些用户时,我想知道(总是)它依赖于哪个组织。

处理这个问题的最佳方法是什么?

我认为现在完美的解决方案是,如果我可以在用户的​​所有选择结果中获得organization_id,例如user_organization_id

我在这一点上是真的吗?如何正确地做到这一点?我的数据库在PostgreSQL上运行(9.3)。

回答

1

当我选择一些用户时,我想知道(总是)到哪个组织取决于哪个 。

使用联接:

SELECT u.*, t.team_organization_id AS organization_id 
FROM users  u 
JOIN teams_users tu ON tu_user_id = u.user_id; 
JOIN teams  t ON t.team_id = tu.tu_team_id 
WHERE tu_user_id = $user_id; 

要获得自动,你可以创建一个VIEW封装查询:

CREATE VIEW usr_org As 
<query from above> 

然后代替SELECT * FROM users,使用:

SELECT * FROM usr_org; 

More about views in the manual.

+0

好的,所以我的问题变成:自动将'organization_id'添加到'users'表上的每个选择中,而不是为每个select语句执行此连接的方法是什么。我应该定义一个触发器吗? – 2014-08-29 10:45:59

+1

@RémiB.:没有'SELECT'的触发器。你可能想要一个'VIEW'。 – 2014-08-29 11:04:52

相关问题