2015-10-07 3 views
0

У меня есть интересный вопрос программирования высокого уровня: у меня есть приложение Rails для записи данных с базой данных MySQL. У меня есть схема, запрограммированная для тех, кто будет использовать все поля базы данных в приложении.Разрешить пользователю включать или выключать (в основном скрыть) любое количество полей базы данных?

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

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

Я не могу думать ни о каком другом пути, который действительно меньше идеала.

Есть ли другие базы данных, которые лучше подходят для такого типа ситуации, например, для NoSQL или хранилища документов или для PostgreSQL? Или может кто-нибудь придумать лучший план игры на высоком уровне для такой проблемы?

+0

Просмотров мой дорогой сэр, просмотров. – e4c5

+0

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

+0

@CraigRinger Мне определенно придется взаимодействовать с презентацией/представлением/пользовательским интерфейсом. «если у пользователя это поле включено, покажите его». Мне просто нужен хороший способ - или, лучший способ - хранить эти данные. – gregblass

ответ

0

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

0

Согласно вашей проблеме, я думаю, что MongoDB является совершенным, потому что это схематично.

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

{ a : “Joe”, b : 3.3, c : [1,2,3] } 

{ a : “Kate”, x : “abc” } 

{ q : 456 } 

Конечно, при использовании базы данных для реальных задач, данные которой имеет довольно последовательную структуру. Что-то вроде следующего будет более общим:

{ name : “Deepak”, age : 30, interests : ‘cricket’ } 

{ name : “Greg”, age : 25 } 

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

0

В PostgreSQL вы можете предоставлять разрешения не только для таблиц, но и для столбцов.

Приложение может использовать has_column_privilege(), чтобы выяснить, может ли конкретный пользователь прочитать этот столбец, а затем показать столбец или нет.