对多对多关系使用联接或多选

2024-09-27 23:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两张桌子:

FileData:
    * FileSystemID
    * FilePath
    * Checksum
    * Data

ScanResult:
    * Checksum
    * Result
    * ScanType

FileDataScanResult表通过它们的Checksum列进行关联

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

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

  1. 在两个表之间有一个关联表(表中有外键),这样我们就可以使用这个表来连接

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

太好了!p>

当引擎是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

Tags: databin关系resultselectgenerallogisticchecksum

热门问题