Использование соединения или множественного выбора для отношения «многие ко многим» - PullRequest
0 голосов
/ 13 июня 2018

У меня есть следующие две таблицы:

FileData:
    * FileSystemID
    * FilePath
    * Checksum
    * Data

ScanResult:
    * Checksum
    * Result
    * ScanType

Таблицы FileData и ScanResult связаны через столбцы Checksum.

Они могут иметь отношения Многие ко Многим, где важным является отношение от FileData к ScanResults.(Противоположное отношение не имеет значения.)

Вопрос в том, какой дизайн более эффективен для этого варианта использования:

  1. Наличие таблицы ассоциации между двумя таблицами (который будет иметь внешние ключи таблицы), чтобы мы могли использовать JOIN, используя эту таблицу.

  2. Создание запросов с использованием SELECT из обеих таблиц - SELECT * FROM FileData, ScanResult WHERE FileData.Checksum = ScanResult.Checksum

Если у вас есть какие-либо другие предложения, это было бы здорово!

Я использую SQLAlchemy (в python), когда движок postgresql.

** EDIT **
Пример из БД:

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
...