2011-04-10 2 views
0

Я пытаюсь найти хороший способ сохранить эти серии точек в базе данных.Best MySQL datatype

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

+----------------------------+ 
| x_points | 1:2:3:4:5... | 
| y_points | 1:2:3:4:5... | 
+----------------------------+ 

Затем веб-приложение будет тянуть точки и нарисовать их на холсте.

Есть ли лучший способ сохранить точки в строке в db?

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


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

Образец seniro был бы пользователем, который может нарисовать y = x^2, а затем обведите y-перехват. Затем они могли бы ссылаться на этот холст, и он перерисовал бы их круг y-перехвата и график. Конечно, это упрощенный пример, но я не могу понять, как лучше сохранить точки на холсте.

Надеюсь, это поможет больше.

+1

Каковы ваши требования, вы будете вообще запрашивать эти данные? Рассматривали ли вы сохранение какого-либо векторного формата как blob (двоичный) или текст (SVG)? – Novikov

+0

Если вам нужно использовать текстовый тип любым способом, я бы, вероятно, просто сериализовал php-массив ... он будет длиннее из-за формата, но таким образом вам не придется беспокоиться о случайном испортить процесс декодирования/кодирования или иметь для дальнейшего изменения форматов информации по какой-то причине вам нужно добавить дополнительную информацию в пункты – prodigitalson

ответ

5

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

+----------------------+  +-----------------+ 
|  Shape   |  | Point_Values | 
+----------------------+  +-----------------+ 
| shape_id (INT)  |  | shape_id (INT) | 
| shape_name (VARCHAR) |  | point_x (INT) | 
+----------------------+  | point_y (INT) | 
           +-----------------+ 

Чтобы сделать новую форму, вставить новую форму в Shape таблицы. Затем создайте одно или несколько значений в таблице Point_Values. Если вы хотите, чтобы вернуться назад и получить значение, вы должны использовать объединение, как это:

SELECT s.shape_name, v.point_x, v.point_y 
FROM Shape s 
JOIN Point_Values v ON s.shape_id = v.shape_id 
WHERE s.shape_id = 5 

Это имеет преимущество быть очень гибкими. Каждая форма может иметь 0 или более очков, и есть неявное выполнение, что должно быть равное количество точек x и y.