Пользовательские настройки с использованием SQL и JavaScript - PullRequest
0 голосов
/ 01 января 2011

Я использую серверный JavaScript - да, на самом деле я использую серверный JavaScript.Чтобы еще больше усложнить ситуацию, я использую Oracle в качестве серверной базы данных (10g).С помощью какого-то сумасшедшего XSLT-кода и создания HTML-кода, похожего на мутант, я могу создавать по-настоящему модные веб-формы - да, я знаю о Rails и других аналогичных фреймворках и вместо этого выбираю путь ужаса.В моем распоряжении нет JQuery или других модных фреймворков, просто обычный JavaScript, который должен поддерживаться базовым движком Mozilla Rhino.Да, это безумие, и мне это нравится.

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

У всех моих пользователей есть уникальный user_id, и этот user_id доступен в течение всего сеанса.

Моя первоначальная идея - создать таблицу предпочтений пользователя, в которой у меня есть три столбца: user_id, feature и pref_string.Используя разделитель, такой как: или - (еще не думал о подходящем), я мог бы сохранить кучу предпочтений в виде списка и сохранить его элементы в массиве, используя метод .split (аналогично PHP).-функция взрыва).Столбец функции может быть похож на имя таблицы или некоторый идентификатор для «функции», которую я тоже хочу связать с настройками.Я ненавижу жесткое кодирование объектов, особенно потому, что хочу иметь возможность их резервного копирования и повторного использования этой функциональности во всем приложении.Конечно, мне бы понравились лучшие идеи, просто имейте в виду, что я не могу просто добавить библиотеку, которая легко.

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

Надеюсь, это не звучит слишком сложно, потому что ну ... это в основном что-то действительно простое, что мне нужно.

Спасибо!

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

Допустим, я хочу заполнить выпадающий список, который в настоящее время имеет 10 динамических значений.Я бы получил их из базы данных, используя простое выражение select:

SELECT pet, value FROM pets

Это вернуло бы таблицу, подобную следующей:

dog  1
cat  2
fish 3

Я бы ввел это в раскрывающемся списке.Однако, если бы я мог добавить настройки в эту таблицу, например, user_id 100 будет видеть только млекопитающих (собака, кошка), а user_id 200 будет видеть только морских существ (рыба).А теперь представьте, что в таблице есть все существа мира, и у меня есть много таблиц, которые требуют таких предпочтений.

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

Ответы [ 2 ]

2 голосов
/ 02 января 2011

Похоже, это не имеет ничего общего с серверным JavaScript (который я не считаю безумным выбором) или отсутствием фреймворка (который я делаю думаю немного сумасшедший).Это основа базы данных и дизайна таблиц.

Как вы классифицируете список значений из таблицы, зависит от вас в зависимости от обстоятельств.Например, у вас может быть таблица PETS, содержащая данные, которые вы описываете.Тогда у вас может быть таблица PET_ATTRIBUTE_LIST, в которой будут данные, которыми может обладать PETS.Наконец, у вас может быть таблица PET_ATTRIBUTE, которая связывает эти два элемента.Таким образом, атрибуты (рыба, млекопитающее, позвоночное и т. Д.) Находятся в одной таблице, домашние животные (собака, кошка, бета и т. Д.) - в другой, а затем произвольный набор атрибутов может быть связан с домашним животным.

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

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

0 голосов
/ 01 января 2011

Я думаю, вы должны пересмотреть свою точку зрения "не использовать фреймворк". Helma / Ringo - это зрелый и готовый к работе серверный JavaScript-фреймворк, основанный на Rhino. Уровень абстракции отображает объекты javascript в реляционную базу данных (с подключением jdbc), а также уже предоставляет простые методы для пользовательских объектов и предпочтений.

...