Перемещение данных из сетки в базу данных - PullRequest
1 голос
/ 11 июня 2009

У меня есть следующая сетка поиска

x A B C D
A 0 2 1 1
B 2 0 1 1
C 1 1 0 1
D 1 1 1 0

Подумайте об этом, как о коммивояжере с точками, хотя алгоритм не имеет отношения к этой проблеме. Это больше похоже на поиск от A-> B

Как лучше всего хранить данные в базе данных, поскольку время одинаково в обоих направлениях. От А до В равно 2, а от В до А равно 2

Start End Time
A      B     2
A      C     1
B      A     2  
etc

Это похоже на дублирование всех данных, что было бы не очень хорошим дизайном.

Есть какие-нибудь мысли, которые были бы наилучшим способом реализовать это?

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Согласен с OrbMan. Вы можете принять соглашение для хранения верхнего или нижнего треугольника. и после загрузки этого треугольника из базы данных просто отразите его. Делая это в db streamer, загрузчик должен инкапсулировать / локализовать поведение в одном месте.

О, еще одна вещь, вам, вероятно, следует использовать матричную реализацию, которая аналогична так, что a [i, j] возвращает a [j, i], если i> j, 0, если i == j. Вы получаете точку ... Тогда просто нужно сохранить и загрузить элементы, где i<j.

1 голос
/ 11 июня 2009

Не храните дубликаты строк. Просто сделайте выбор как это:

select *
from LookupTable
where (Start = 'A' and End = 'B')
    or (Start = 'B' and End = 'A')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...