Как правильно сделать гибкие столбцы в базе данных? - PullRequest
2 голосов
/ 07 апреля 2010

Я храню столбцы в базе данных, чтобы пользователи могли добавлять и удалять столбцы с поддельными столбцами. Как мне это эффективно реализовать?

Ответы [ 3 ]

6 голосов
/ 07 апреля 2010

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

Это можно сделать, используя что-то вроде

TableAttribute
    AttributeID
    AttributeType
    AttributeValue

Это применение вертикали в основном используется вприложения, в которых пользователи могут создавать свои собственные пользовательские формы и поля (если я правильно помню, макет формы devexpress позволяет создавать пользовательские макеты). В основном используется в приложениях CRM, это легко модифицируется во время производства и легко поддерживается, но может значительно снизить производительность SQL, когда набор данных становится очень большим.

РЕДАКТИРОВАТЬ:

Это будет зависеть от того, как далеко вы хотите пройти.Вы можете установить, что это будет для каждой формы / таблицы, добавить атрибуты, которые описывают фактическое положение элемента управления (поиск, комбо, дата и т. Д.), Допустимые значения (min / max / allow null).

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

1 голос
/ 08 апреля 2010

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

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

В любом случае вы должны строго ограничить тех, кто может определять дополнительные столбцы, только системным администраторам (которые могут находиться на уровне клиента). Лучше на самом деле поговорить с пользователями на этапе проектирования и посмотреть, что им нужно. Вы обнаружите, что можете должным образом спроектировать систему, которая имеет 90 +% потребности клиента, если вы действительно общаетесь с ними (и не только с менеджерами, а также с пользователями на всех уровнях организации).

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

1 голос
/ 07 апреля 2010

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

Но зачем добавлять столбцы? Почему не связанная таблица?

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