Mysql размеры полей на метаданных - PullRequest
2 голосов
/ 11 ноября 2009

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

, например:

meta_key = "isActive"meta_valu = "1"

или

meta_key = "theDate" meta_value = "Сб 23 июля 02:16:57 2005"

или

meta_key= "description" meta_value = "это описание, и этот текст может продолжаться и продолжаться, поэтому мне нужно длинное поле"

Вопрос в том, каким типом поля должен быть meta_value, чтобы не слишком раздувать БДмного для каждой вставленной «1», какие поля являются динамическими и будут занимать только пространство собственной длины

надеюсь, я был понятен ...

Ответы [ 5 ]

1 голос
/ 11 ноября 2009

Я бы использовал модель неструктурированных данных, например, как вы предлагаете, если вы храните неструктурированные данные или документы (например, Friendfeed).

Альтернативные мысли для хранения

Существует гораздо более подходящих систем хранения данных для неструктурированных данных, чем SQL-сервер. Я бы порекомендовал объединить одну из них с вашей существующей структурированной базой данных.

Параметры SQL

Если вы не можете сделать это и должны хранить неструктурированные данные в вашей БД SQL, у вас есть несколько вариантов, тип данных не единственный вопрос, как хранятся ваши данные.

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

  • Уметь определять модель для данных в вашем приложении, поэтому, когда вы читаете данные, вы знаете, что у вас есть.

Следующие 2 варианта обеспечивают решение обеих этих проблем ...

XML - тип данных xml

Вам нужно учитывать данные, которые вы храните. Если вам нужно вернуть его и выполнить сложный поиск по содержимому, то XML - ваш лучший выбор. Это также позволяет вам проверить, что сохраненные данные соответствуют определенной структуре (используя dtd). Смотрите эту статью.

http://msdn.microsoft.com/en-us/library/ms189887.aspx

или JSON - тип данных nvarchar (max)

Если вам необходимо вернуть эти данные для отображения на веб-странице или использования в Javascript, тогда проще всего сохранить их в формате JSON. Вы можете легко загрузить его в объектную модель, с которой можно работать напрямую и манипулировать. Недостатком является то, что сложный поиск данных будет очень медленным по сравнению с XPATH (переберите все объекты, найдите подходящие).

Если вы храните данные с других языков или странные символы, используйте nvarchar (версия в юникоде). В противном случае varchar будет наиболее эффективным.

0 голосов
/ 11 ноября 2009

В MySQL я обычно использую тип данных blob, который я храню в сериализованной версии динамического класса, который я использую для веб-сайта.

Большой двоичный объект - это, в основном, двоичные данные, поэтому, как только вы поймете, как сериализовать и десериализовать данные, вы должны по большей части быть в восторге от этого.

Обратите внимание, что для больших объемов данных это становится намного менее эффективным, но опять же, вам не нужно изменять всю структуру.

Вот лучшее объяснение типа данных BLOB-объектов: http://dev.mysql.com/doc/refman/5.0/en/blob.html

0 голосов
/ 11 ноября 2009

Используются ли они как временные таблицы или живые таблицы?

Вот идея, которую я еще не видел, но она МОЖЕТ работать на вас, если вы в первую очередь беспокоитесь о росте размера, но не заботитесь о том, чтобы программа выполнила небольшую дополнительную работу. Тем не менее, я считаю, что лучше всего создавать эти мета-ключи с полями в их собственной таблице (например, OrderDate), и тогда у вас могут быть описания, даты и т. Д. Таблица БД с отловом может привести к большим головным болям. 1003 *

Создайте таблицу метаданных, используя эту идею:

MetaID MetaKey MetaVarchar (255) метатекстовых Metadate

varchar, текст и дата могут быть нулевыми.

Пусть программа вставки решит, в какую ячейку ее поместить, и вызов базы данных покажет, какое поле не было пустым. Короткие элементы будут в varchar, длинные - в тексте, а также дату, которую вы можете использовать, чтобы изменить способ отображения даты.

0 голосов
/ 11 ноября 2009

Надеюсь, это поможет:

datatype=Text
0 голосов
/ 11 ноября 2009

Возможно, вам нужен тип поля VARCHAR .

В отличие от CHAR, значения VARCHAR хранятся в виде однобайтового или двухбайтового префикса длины плюс данные.

...