Прежде всего, я не разработчик базы данных, поэтому, пожалуйста, со мной. Во-вторых, я прочитал множество сообщений по многоаспектной, одномерной, многомерной базе данных и т.д., Но ни один из ответов не помог. Я нашел много документации по Google, но только предоставил справочную информацию и не ответил на вопрос.
У меня много строк, связанных друг с другом. Они необходимы в PHP script. Структура иерархическая. Вот пример.
A:
AA:
AAA
AAC
AB
AE:
AEA
AEE:
AEEB
B:
BA:
BAA
BD:
BDC:
BDCB
BDCE
BDD:
BDDA
BE:
BED:
BEDA
C:
CC:
CCB:
CCBC
CCBE
CCC:
CCCA
CCCE
CE
Каждый отступ предполагает новый уровень в многомерном массиве.
Цель состоит в том, чтобы получить элемент с именем PHP и всеми его потомками. Если, например, я запрашиваю A, я хочу получить массив строки, содержащий array('A', 'AA', 'AAA', 'AAC', 'AB', 'AE', 'AEA', 'AEE', 'AEEB')
. "Проблема" заключается в том, что запросы могут также выполняться для элементов более низкого уровня. Если я запрошу AEE, я хочу получить array('AEE', 'AEEB')
.
Как я понимаю концепцию реляционных баз данных, это означает, что я не могу использовать реляционную базу данных, потому что между элементами нет общего "ключа". Решение, которое, как я думал, возможно, назначает элементы PARENT для каждой ячейки. Итак, в таблице:
CELL | PARENT
A NULL
AA A
AAA AA
AAC AA
AB A
AE A
AEA AE
AEE AE
AEEB AEE
Таким образом, я думаю, что вы должны иметь возможность запросить заданную строку и все элементы, разделяющие этот родительский элемент, а затем рекурсивно идти по этому пути, пока не будет найдено больше элементов. Однако это кажется мне довольно медленным, потому что на каждом уровне необходимо будет просмотреть все пространство поиска, что именно то, чего вы не хотите в многомерном массиве.
Так что я немного в убытке. Обратите внимание, что на самом деле существует около 100 000 строк, структурированных таким образом, поэтому скорость важна. К счастью, база данных статична и не изменится. Как хранить такую структуру данных в базе данных без необходимости иметь дело с длинными циклами и временем поиска? И какое именно программное обеспечение базы данных и тип данных лучше всего подходят для этого? Мне пришло в голову, что PostgreSQL уже присутствует на наших серверах, поэтому я предпочел бы придерживаться этого.
Как я уже сказал, я новичок в базах данных, но я очень хочу учиться. Поэтому я ищу обширный ответ, который подробно излагает и дает преимущества и недостатки определенного подхода. Производительность является ключевой. Ожидаемый ответ будет содержать лучший тип базы данных и язык для этого варианта использования, а также script на этом языке для построения такой структуры.