Оптимальный дизайн таблицы базы данных для поиска атрибутов - PullRequest
0 голосов
/ 15 мая 2019

Привет, я надеюсь, что все в порядке, что я пишу этот вопрос здесь. В настоящее время я обрисовываю в общих чертах структуру данных, которая будет находиться в базе данных, где есть фильмы, и у каждого фильма есть много дескрипторов.

Я хочу иметь возможность выполнять поиск по всей базе данных и находить фильм X с атрибутом Y, Z и без A, B, C.

Я думаю о том, чтобы хранить дескрипторы / атрибуты следующим образом:

Movie ID | Attribute | Has_Attribute
1        | Action    | 0
1        | Adventure | 1
1        | Comedy    | 1
2        | Action    | 1

Это лучший способ сохранить все атрибуты для записи?

Предположительно для каждого последующего вызова я буду искать, где Action == 0 AND Comedy == 1 ... n == n_has_attribute, чтобы начать сужать поиск.

1 Ответ

0 голосов
/ 15 мая 2019

В таблице проектирования вам не нужно хранить атрибуты, которые не существуют.Вам нужно просто записать атрибуты, которые есть у фильма.Следовательно, ваш дизайн будет выглядеть следующим образом:

Movie ID | Attribute
1        | Adventure 
1        | Comedy   
2        | Action    

Более того, если количество атрибутов не слишком много, вы можете определить их как столбец в таблице с двоичным значением:

Movie Id | Adventure | Comedy | Action 
1        | 1         | 1      | 0
2        | 0         | 0      | 1

Поэтому, чтобы выбрать лучшую структуру данных, вам нужно уточнить пространство проблемы с точки зрения количества атрибутов, количества фильмов.

Кроме того, если вам нужно сохранить данные в дереве решений, точками разрыва узлов будут атрибуты, и это больше похоже на вторую архитектуру табулирования, чем на первый дизайн.

...