对多对多关系使用连接或多重选择

时间:2018-06-13 14:45:32

标签: python sql postgresql database-design sqlalchemy

我有以下两个表:

FileData:
    * FileSystemID
    * FilePath
    * Checksum
    * Data

ScanResult:
    * Checksum
    * Result
    * ScanType

FileDataScanResult表格通过其Checksum列相关联。

他们可以有多对多的关系,其中重要的是从FileDataScanResults的关系。 (相反的关系并不重要。)

问题是,对于这个用例,哪种设计更有效:

  1. 在两个表之间有一个关联表(它将具有表外键),因此我们可以使用此表来使用JOIN。

  2. 使用两个表中的SELECT创建查询 - SELECT * FROM FileData, ScanResult WHERE FileData.Checksum = ScanResult.Checksum

  3. 如果您有任何其他建议,那就太棒了!

    当引擎是postgresql时,我正在使用SQLAlchemy(在python中)。

    **编辑**
    来自DB的样本:

    FileData:
    FileSystemID | FilePath     | Checksum                          | Data 
     1           | /user1/a.bin | 5953E1EBB5A153AF93DA61EA433889D0  | ...
     1           | /user1/b.bin | 207402D3E82BF24E7ED4965DC66D426C  | ...
     2           | /user2/h.bin | 5953E1EBB5A153AF93DA61EA433889D0  | ...
     2           | /user2/z.bin | 8D41627E46D5B8556D0D3E30EC15538E  | ...
    
    ScanResult:
    Checksum                         | Result | ScanType
    5953E1EBB5A153AF93DA61EA433889D0 | 1      | general
    5953E1EBB5A153AF93DA61EA433889D0 | 0      | logistic
    5953E1EBB5A153AF93DA61EA433889D0 | 1      | anomaly
    207402D3E82BF24E7ED4965DC66D426C | 1      | general
    207402D3E82BF24E7ED4965DC66D426C | 1      | logistic
    8D41627E46D5B8556D0D3E30EC15538E | 0      | general
    

0 个答案:

没有答案