Поскольку (в комментариях к вопросу) вы знаете о подводных камнях «эффекта внутренней платформы», также верно, что это очень распространенное требование - в частности, для хранения пользовательских столбцов, определенных пользователем. И действительно, большинству команд это нужно. Опробовав различные подходы, наиболее успешным я считаю , чтобы сохранить дополнительные данные в соответствии с записью - в частности, это упрощает получение данных, не требуя дополнительных шагов, таких как секунда. сложный запрос к внешней таблице, и это означает, что все значения совместно используют такие вещи, как метка времени / версия строки для параллелизма.
В частности, я нашел столбец CustomValues
(например, текстовый или двоичный; обычно это json / xml, но может быть более экзотическим), очень эффективный способ работы, выступающий в качестве пакета свойств для дополнительных данных. , И у вас нет для его анализа (или даже SELECT
), пока вы не узнаете, что вам нужны дополнительные данные.
Все, что вам тогда нужно, - это способ привязать именованные ключи к ожидаемым типам, но вам все равно нужны эти метаданные .
Я, однако, подчеркну важность обеспечения переносимости данных; не храните (например) какую-либо конкретную платформенную сериализацию (например, BinaryFormatter
для .NET) - такие вещи, как xml / json - это хорошо.
Наконец, ваша СУБД также может работать с этим столбцом; например, SQL Server имеет тип данных xml, который позволяет вам выполнять определенные запросы и другие операции с данными xml. Вы должны принять собственное решение, будь то помощь или помеха; p
Если вам также нужно добавить таблицы, мне интересно, действительно ли вы используете СУБД в качестве СУБД; в этой точке я бы рассмотрел вопрос о переключении с СУБД на базу данных документов , такую как CouchDB или Raven DB