Представление пары ключ / значение, где значение может быть любого типа (в реляционной базе данных) - PullRequest
2 голосов
/ 30 марта 2009

Небольшой, но важный уголок базы данных, которую я разрабатываю, будет использоваться для хранения результатов произвольных вычислений. Эти результаты могут быть любого типа. Как я могу представить поле Значение, которое может быть любого типа в реляционной базе данных?

Единственное, о чем я могу думать, - это иметь отдельные таблицы, основанные на типе данных, которые имеют внешние ключи обратно в общую таблицу. Это не кажется мне правильным, потому что для того, чтобы вернуть значения, мне нужно было бы объединить несколько разных таблиц. Должен быть лучший способ.

Ответы [ 5 ]

1 голос
/ 30 марта 2009

Можете ли вы сериализовать результат в какой-то двоичный формат? В этом случае 'image' будет содержать ваши данные, и вы также можете сохранить сам тип в виде поля.

0 голосов
/ 30 марта 2009

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

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

0 голосов
/ 30 марта 2009

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

0 голосов
/ 30 марта 2009

Один из подходов, которые я использовал ранее, заключается в сохранении сериализованного значения с отдельным строковым полем, определяющим его тип. Например, если вы находитесь в .NET, вы можете хранить «System.Decimal» и сериализованное десятичное значение. Это работает с двоичной сериализацией или сериализацией XML с полем BLOB или длинной строкой соответственно.

0 голосов
/ 30 марта 2009

Пока ваши уровни абстракции имеют возможность сериализовать все типы, хранить их как двоичные данные и сериализовать, десериализовывать. Может быть, с колонкой, указывающей тип данных. Если у вас есть только CASTable типы данных, вы еще более настроены.

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