2010-10-19 2 views
1

Какая была бы лучшая база данных/техника для использования, если бы я хотел создать базу данных, которая может «добавлять», «удалять» и «редактировать» таблицы и столбцы?Настраиваемая база данных

Я бы хотел, чтобы он был масштабируемым и быстрым.

Должен ли я использовать одну таблицу и четыре столбца для этого (Id, Table, Column, Type, Value). Есть ли хорошие статьи об этом. Или есть другие решения?

Возможно, три таблицы: одна, содержащая таблицы, одна из которых содержит столбцы и одну для значений?

Возможно, кто-то уже создал db для этой цели?

Мои требования в том, что я использую .NET (я предполагаю, что база данных не должны быть на окнах, но я бы предпочел, чтобы)

+5

Остерегайтесь [внутренний эффект платформы] (http://en.wikipedia.org/wiki/Inner-platform_effect) (и ноты что таблица, которую вы описываете, явно указывается в качестве примера); не записывайте базу данных * внутри * базы данных, если вы не можете ее абсолютно помочь. –

+0

Я предполагаю из вашего вопроса, что вы хотите сделать это на лету? Неужели вы можете сделать это практически с любой базой данных? – Paddy

+0

Re "Может быть, кто-то уже создал db для этой цели?" - да, каждая RDBMS, о которой я знаю, позволяет добавлять/удалять столбцы и таблицы. –

ответ

0

С (в комментариях по этому вопросу) вы знаете о ловушки «эффекта внутренней платформы», также верно, что это очень распространенное требование - в частности, для хранения пользовательских пользовательских столбцов. И действительно, большинству команд это нужно. Попробовав различные подходы, то, что я нашел наиболее успешным, - это сохранить дополнительные данные в строке с записью - в частности, это упрощает получение данных, не требуя дополнительных шагов, таких как второй сложный запрос на внешняя таблица, и это означает, что все значения разделяют такие вещи, как timestamp/rowversion для параллелизма.

В частности, я нашел столбец CustomValues (например, текстовый или двоичный; обычно json/xml, но может быть более экзотическим) - очень эффективный способ работы, действуя как мешок свойств для дополнительных данных. И у вас нет , чтобы разобрать его (или действительно, SELECT), пока вы не узнаете, что вам нужны дополнительные данные.

Все, что вам нужно, это способ привязать названные ключи к ожидаемым типам, но вам нужны метаданные в любом случае.

Я буду, однако, подчеркнуть важность переноса данных; например, не хранить какую-либо определенную сериализацию на платформе (например, BinaryFormatter для .NET) - такие вещи, как xml/json, прекрасны.

И, наконец, ваша RDBMS также может работать с этой колонкой; например, SQL Server имеет тип данных xml, который позволяет запускать определенные запросы и другие операции с данными xml. Вы должны сделать свое собственное решение о том, что является помощь или помеха, р


Если вам также необходимо добавить таблицы, интересно, если вы действительно используете РСУБД в качестве СУБД; на , что точка я бы рассмотреть вопрос о переходе от RDBMS к document-database, такие как CouchDB или Raven DB

+1

Спасибо, я рассмотрю ваши предложения и RavenDB. И RDBMS никогда не требовалось :) – Andreas

Смежные вопросы