使用 SQL 和 JavaScript 的用户首选项

Posted

技术标签:

【中文标题】使用 SQL 和 JavaScript 的用户首选项【英文标题】:User preferences using SQL and JavaScript 【发布时间】:2011-01-01 16:46:16 【问题描述】:

我正在使用服务器端 javascript - 是的,我实际上正在使用服务器端 JavaScript。为了使事情更加复杂,我使用 Oracle 作为后端数据库 (10g)。通过一些疯狂的 XSLT 和类似突变的 html 生成,我可以构建非常精美的 Web 表单 - 是的,我知道 Rails 和其他类似的框架,我选择了恐怖的道路。我没有 JQuery 或其他花哨的框架可供我使用,只有普通的 JavaScript 应该由名为 Mozilla Rhino 的底层引擎支持。是的,这太疯狂了,我喜欢它。

所以,我有一堆表格可供我使用,其中一些表格充满了链接到值的关联键。由于我是一个讨人喜欢的人,我想添加一些漂亮的用户偏好驱动解决方案。

我的用户都有一个唯一的 user_id,并且这个 user_id 在整个会话期间都可用。

我最初的想法是创建一个用户偏好表,其中有“三”列:user_id、feature 和 pref_string。使用分隔符,例如 : 或 - (还没有想到合适的分隔符),我可以将一堆首选项存储为列表,并使用 .split-method 将其元素存储在数组中(类似于 php - 爆炸功能)。功能列可能像表名或我想链接首选项的“功能”的某些标识符。我讨厌硬编码对象,尤其是当我希望能够备份这些对象并在应用程序范围内重用此功能时。当然,我会喜欢更好的想法,但请记住,我不能轻易添加库。

这些首选项可能就像“加入”到表中一样,因此我可以查询它并使用它的值。

我希望它听起来不要太复杂,因为嗯..它基本上是我需要的非常简单的东西。

谢谢!

编辑

假设我想填写一个下拉框,目前有 10 个动态值。 我会使用一个简单的 select 语句从数据库中获取这些:

SELECT pet, value FROM pets

它会返回如下表:

dog  1
cat  2
fish 3

我会在下拉框中输入它。但是,如果我愿意将首选项添加到该表中,例如 user_id 100 只会看到哺乳动物(狗、猫),而 user_id 200 只会看到海洋生物(鱼)。现在想象一下,这张桌子上有世界上所有的生物,而我有很多需要这种偏好的桌子。

由于我可以拥有无​​限的用户,我将不得不应用某种形式的元数据。我正在寻找解决方案。

【问题讨论】:

您的偏好表也应该有某种“偏好类型”列。一些首选项是简单的布尔值,其他可能是日期、整数或字符串。您可能还希望包含其他指标,以便偏好 UI 可以在某种程度上自动化 - 对于每个新的偏好都需要自己的 UI 编码,这将是一个维护问题。 哦,另外,您在这里要求什么也不清楚。您当前的解决方案有问题吗? 我知道不能掉以轻心。但我宁愿从一个至少可以有一些“偏好”的模型开始;像初始值或可见项目。后者可能只是使用布尔类型。 没有错,我想添加一个功能,为不同类型的用户使用相同的解决方案(交互调整)。 【参考方案1】:

这听起来与服务器端 JavaScript 无关(我认为这是一个疯狂的选择)或您缺乏框架(我这样做 em> 觉得有点疯狂)。这是数据库和表设计的核心。

如何对表格中的值列表进行分类取决于具体情况。例如,您可能有一个 PETS 表,其中包含您描述的数据。然后,您可能有一个 PET_ATTRIBUTE_LIST 表,其中包含 PETS 可能拥有的数据。最后,您可以有一个 PET_ATTRIBUTE 表来链接这两者。这样,属性(鱼、哺乳动物、脊椎动物等)在一个表中,宠物(狗、猫、beta 等)在另一个表中,然后可以将任意一组属性链接到宠物。

对于用户只看到对他们很重要的选项的问题,您将拥有一个 USER_PET_ATTRIBUTE 表,该表将包含用户的表和 PET_ATTRIBUTE_LIST 表之间的记录链接起来。

使用这种方法的多对多关系有很多,但它可能是最灵活的。

【讨论】:

当然,我同意。然而,来自数据库的数据被加载到 JavaScript 变量中。我可以生成一个视图来获得专门针对该用户的结果。有此类属性列表的参考资料(示例、最佳实践)吗? 对,您想在数据库/后端处理繁重的数据。您可以执行在数据发送到前端之前执行过滤的视图或存储过程。不管你喜欢哪个,真的,但我喜欢用引用游标将东西保存在包/过程/函数中。【参考方案2】:

我认为您应该重新考虑“不使用框架”的观点。 Helma/Ringo 是一个基于 Rhino 的成熟且可用于生产的服务器端 JavaScript 框架。抽象层将 javascript 对象映射到关系数据库(连接 jdbc),并且已经为用户对象和偏好提供了简单的方法。

【讨论】:

我考虑在添加框架之前先了解一些概念。我喜欢抽象;但我也喜欢丑陋的部分。我在实践中学习,在失败时我发现。因此,仅仅为了方便而使用框架将在技术上解决我的问题。但这并不能满足我的饥饿感。

以上是关于使用 SQL 和 JavaScript 的用户首选项的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:将数据调用到 javascript 中的首选方法?

在自定义 SSIS 任务中执行 SQL 的首选方式是啥?

在 sql 数据库中创建唯一列 id 的首选方法

使用 ES6 模块和 CoffeeScript 的首选方式

将本地时间转换为用户首选时区,将用户首选时区转换为 GMT

Sql 报告服务和 Javascript