在DBMS中使用桥实体

时间:2017-03-13 09:49:32

标签: sql database vb.net

所以我做了一个需要我们使用桥实体的项目。我做了一个简单的设计(虽然我无法向你展示)。

tblStudent   - (PK)Student_ID  - 姓  - 名字  - 中间名字   - YearLevel  - 部分   - 顾问   - 手机号码

tblGets [bridge]   - (PK)Student_ID   - (PK)OffenseCode

tblOffense   - (PK)OffenseCode   - OffenseDescription   - OffenseCategory

我已经设法INNER JOIN我的桌子除了tblGets,我不知道我将在我的项目中加入哪些内容。因为我的项目记录了学生在学校犯下的罪行。

任何人都可以帮助我在我的项目中加入tblGets吗?因为事实上它似乎并不合适。

1 个答案:

答案 0 :(得分:1)

Bridge实体可用于管理多对多关系。

如果多个学生可以犯下一个特定的罪行,那么保留这个表是有意义的。

CASE 1 :在您的申请中,您可以按学校列出所有违法行为:

SELECT 
    OffenseDescription,
    OffenseCategory,
    Student_ID,
    LastName,
    FirstName
FROM tblOffense O
LEFT JOIN tblGets G ON G.OffenseCode = O.OffenseCode
LEFT JOIN tblStudent S ON S.Student_ID = G.Student_ID
WHERE O.School_ID = 23

结果可能如下:

  

学校23的结果:

     
      
  • 2017-01-02一伙抢劫案      
        
    • Bob Sand
    •   
    • Tim Mitch
    •   
  •   
  • 2017-03-12在草坪上散步      
        
    • Antony Brown
    •   
  •   

CASE 2 :当您显示特定进攻的信息时,您可以提供每个相关学生的参考。

CASE 3 :为大多数情况下是他/她的同谋的学生展示一些统计数据,以识别破坏性的友谊:

SELECT
    AccS.Student_ID,
    AccS.FirstName,
    AccS.LastName,
    COUNT(*) AS Amount
FROM tblOffense O
JOIN tblGets G ON G.OffenseCode = O.OffenseCode
JOIN tblStudent S ON S.Student_ID = G.Student_ID
JOIN tblGets AccG
    ON AccG.OffenseCode = O.OffenseCode
    AND AccG.Student_ID <> S.Student_ID -- looking for accomplices
JOIN tblStudent AccS
    ON AccS.Student_ID = AccG.Student_ID
WHERE
    S.Student_ID = @ParticularStudentId
GROUP BY AccS.Student_ID, AccS.FirstName, AccS.LastName
ORDER BY Amount DESC