2016-03-08 2 views
0

У меня есть (на самом деле довольно простая) структура данных, имеющая древовидную смежность. Я пытаюсь найти хороший способ представить данные для веб-приложения, основанного на киноиндустрии, которое должно хранить данные о кинопроектах. Данные состоят из: project -> scene -> shot -> version - каждый соседний с предыдущим по принципу «один ко многим».Лучший способ хранения иерархических данных с известной глубиной?

Прямо сейчас я думаю о простом списке смежности, но у меня возникают проблемы с верой в то, что было бы достаточно эффективно быстро получить название проекта, учитывая только версию, так как мне пришлось бы перебирать другие таблицы, чтобы получить его. (Упрощенный) макет будет выглядеть так: simple adjacency layout

Я думал о том, - вместо того, чтобы ссылки только прямой родитель - ссылки на все более высокие родители уровня (like this), зная, что иерархия имеет фиксированную глубину. Таким образом, я мог бы использовать эти ярлыки, чтобы получить информацию только по одному запросу. Но разве это плохое моделирование данных? Есть ли другие способы сделать это?

ответ

0

Это не хорошее моделирование данных с точки зрения нормализации. Если вы понимаете, что вы ввели неправильную сцену в проект, вам придется переместить его и все вниз по иерархии.

Но ... эффективность для вас важна? Сколько данных вы говорите? Как быстро вам нужен ответ? Я бы сказал, идите с тем, что у вас есть, и если вам это нужно быстрее, у вас есть что-то, что регулярно извлекает данные в кеш.

+0

Я говорю о примерно 5000 наборов данных в год, тенденция вверх. Я знаю, что это не так много, но то, что заставляет меня беспокоиться, - это рендеринг обзоров, которые потребуют обработки 200+ версий, что означает, что мне нужно будет пройти весь путь для всех, чтобы получить соответствующие данные. Некоторая латентность, безусловно, терпимая, но я боюсь, что Wordpress-ish ворует время, которое может стать очень громоздким, когда они складываются. Однако я не думал о кешировании! Может быть, путь. – kschiffer