2010-02-04 2 views
4

У меня есть массив объектов php, которые я хочу сохранить в таблице базы данных mysql. Единственный способ, которым я могу думать, - это просто иметь таблицу для представления объекта с уникальным идентификатором и отдельной таблицей для хранения массива (может быть столбец array_id и object_id), но для получения требуется соединение, которое, как я считаю, может получить дорогая. Есть ли способ лучше? Меня не волнует время хранения или время вставки столько же, сколько время поиска.Самый быстрый способ представления массива в mysql для извлечения

Мне не обязательно это нужно для работы с ассоциативными массивами, но если это решение может быть предпочтительным.

+0

Какие поля из объектов вам нужно хранить? – outis

ответ

2

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

Настоящий вопрос заключается в том, как вы хотите использовать данные. Если вам нужно, чтобы иметь возможность добавлять/удалять поля данных из отдельных узлов в дереве, то вы можете использовать один из двух моделей

1) Примыкание Список модели

2) Модифицированный Preorder обходе дерева Алгоритм

(Они звучат страшно, но это не так уж плохо, я обещаю.)

Первый из перечисленных, вероятно, чаще встречается, а второй - тот, который я начал использовать чаще, и имеет некоторые приятные преимущества, как только вы оберните вокруг себя голову. Взгляните на эту страницу - у нее есть ОТЛИЧНАЯ запись обо всех.

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

$array = array('something'=>'fun', 'nothing'=>'to do') 

$storage_array = serialize($array); 

//INSERT INTO DB 

//DRAW OUT OF DB 

$array = unserialize($row['stored_array']); 

Presto-changeo, это легко.

0

Если вам удобнее не выполнять поиск по SQL в массиве, вы можете добавить один столбец в таблицу и сериализовать массив. Вам придется десериализовать его на повторную подготовку.

Вы можете использовать JSON/PHP serializeation или что-то более подходит для языка вы разрабатываете в

0

присоединяется не должны быть так дорого -. Вы можете определить индекс.