(моя) база данных SQL - хранение разных типов одинакового значения - PullRequest
3 голосов
/ 16 января 2012

Мне нужно хранить разные типы одинакового значения.Значение может представлять DATE, INT, BOOLEAN, DOUBLE и любой другой тип.Мне интересно, возможно ли не использовать несколько таблиц - каждая для своего типа (я предполагаю, что это значительно усложнит использование хранимых значений (в основном поиск, фильтрация)).Будет ли это большим падением памяти и производительности при хранении таблицы из нескольких столбцов с главным образом значениями NULL в строке?

Я имею в виду таблицу с примерами столбцов, из которых будет заполнен только один столбец значений:

id valueVarchar  valueDate  valueBoolean  valueInt  valueDouble

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

Я создаю приложение JSF с использованием MySQL (InnoDB) (база данных не является большой проблемой, ее можно изменить при необходимости) иJPA.

edit:

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

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Если вы используете EclipseLink, вы можете использовать @TypeConverter для преобразования любого типа данных в String. Вы также можете иметь два столбца, один для значения и один для типа значения, вы можете отобразить это, используя отображение @Transformation.

С помощью стандартного JPA вы можете преобразовать тип с помощью методов get / set, используя доступ к свойству.

1 голос
/ 17 января 2012

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

Для этого есть имя: оно называется Модель Entity-Attribute-Value или EAV для краткости.

Хотя существуют ситуации, когда EAV является единственным применимым решением, егоиспользование, как правило, рассматривается как антишаблон, в котором имеются жизнеспособные альтернативы.

Пример использования ненадлежащей реализации базы данных EAV можно найти здесь .

Oneодной из наиболее очевидных целей, для которых может использоваться EAV, является сохранение данных объекта из ОО-проектов в реляционных базах данных.Если вы хотите использовать его именно таким образом, я призываю вас рассмотреть объектно-реляционное отображение (для краткости ORM).

Вы можете найти вопросы, связанные с EAV, в SO, используя тег тег.

0 голосов
/ 16 января 2012

Вы можете хранить что угодно как двоичное значение и приводить его к типу на стороне клиента.Но это значение вряд ли можно эффективно использовать в условиях запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...