Как обрабатывать неизвестный тип данных в одной таблице - PullRequest
0 голосов
/ 04 августа 2009

У меня есть ситуация, когда мне нужно сохранить общий фрагмент данных (может быть int, float или string) в моей базе данных, но я заранее не знаю, какой это будет. Мне нужна таблица (или менее желательно таблицы) для хранения этих неизвестных типизированных данных.

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

В принципе, есть ли лучший способ сделать что-то подобное? Я не придумал ничего менее опасного, чем это, но кажется, что это довольно распространенная проблема. Заранее спасибо.

РЕДАКТИРОВАТЬ: Кроме того, это считается 3NF?

Ответы [ 3 ]

1 голос
/ 04 августа 2009

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

1 голос
/ 04 августа 2009

Вы могли бы легко это сделать, если бы использовал SQLite в качестве базы данных:

Любой столбец в базе данных версии 3, кроме столбца INTEGER PRIMARY KEY, может использоваться для хранения любого типа значения.

Для других СУБД я бы выбрал решение Филиппа .

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

0 голосов
/ 04 августа 2009

Если бы я сделал это, я бы выбрал либо ваш метод, либо я бы преобразовал все в строку и использовал только один столбец. Конечно, будет еще один столбец с типом (который, вероятно, будет полезен и для первого метода).

Для более быстрого кода я бы, вероятно, пошел с вашим методом.

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