小编bid*_*ego的帖子

将复杂的嵌套SQL关联转换为可管理服务的前端数据建模最佳实践是什么?

我正在寻求解决这个问题的可能解决方案.我将使用Angular和Rails,但实际上这个问题有点抽象,不需要在这些框架的上下文中回答.

在前端管理复杂嵌套SQL关联的最佳实践是什么?

假设您有帖子,评论和评论嵌套在帖子下.您将帖子作为JSON发送到前端,并在其下嵌套注释.现在你可以在每个帖子下面列出它们了,很棒.但随后出现了问题:

  1. 如果您还想显示最近的评论怎么办?您的评论服务需要在规范化集合中进行评论,或者以允许按日期排序的方式访问它们.

    • 这是否意味着您对按日期排序的注释进行单独的API调用?这会在前端复制注释,并要求您在两个地方而不是一个地方更新它们(一个用于帖子,一个用于注释,假设可以编辑或更新注释).
    • 您是否实施了某种前端数据规范化?这意味着你有一个缓存层来保存嵌套数据,然后你将各个资源分配给它们相应的服务?
  2. 如果您的数据具有不同的嵌套级别,该怎么办?继续发帖和评论示例.如果您的评论可以回复到10级,该怎么办?

    • 如果您对帖子和评论进行了单独的API调用,这会如何影响您的数据模型?
    • 如果您选择这种方法,这会如何影响您的缓存层?
  3. 如果我们不只是在讨论帖子怎么办?如果您可以评论照片和其他资源怎么办?

    • 这对上面的数据建模模式的两个选项有何影响?

打破这个例子,如果我们谈论的是朋友之间的递归关系怎么办?


我最初的想法和假设的解决方案

我最初的想法以及我如何攻击它是使用缓存层并规范化数据,以便:

  1. 缓存层处理任何必要的规范化
  2. 缓存层保存每个记录的一个规范表示
  3. 服务与缓存层通信以执行CRUD操作
  4. 服务通常不关心也不需要知道数据模型的嵌套/复杂程度,当数据到达服务时它是标准化的

递归关系在某些时候需要是有限的,你不能只是永远地继续嵌套.


这当然听起来很棒,但我看到了很多潜在的陷阱,并希望获得观点.我发现很难将抽象的最佳实践从具体的解决方案分离到特定的数据模型.我很想知道其他人如何解决这个问题,以及他们将如何解决这个问题.

谢谢!

data-modeling angularjs

9
推荐指数
1
解决办法
649
查看次数

安排动态播种

我目前正在使用Sequelize.js播种数据,并将硬编码值用于关联ID。这不是理想的,因为我确实应该能够动态地执行此操作,对吗?例如,将用户和个人资料与“有一个”和“属于”关联相关联。我不一定要用硬编码为用户播种profileId。创建配置文件后,我宁愿在配置文件种子中执行此操作。profileId创建配置文件后,将动态地添加到用户。使用Sequelize.js可以做到这一点吗?还是在使用Sequelize播种时仅硬编码关联ID更为常见?

也许我要播种错误?使用Sequelize时,我是否应该拥有一对一的种子文件和迁移文件?在Rails中,通常只有1个种子文件,如果需要,您可以选择分成多个文件。

通常,仅在此处寻找指导和建议。这些是我的文件:

users.js

// User seeds

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    /*
      Add altering commands here.
      Return a promise to correctly handle asynchronicity.

      Example:
      return queryInterface.bulkInsert('Person', [{
        name: 'John Doe',
        isBetaMember: false
      }], {});
    */

    var users = [];
    for (let i = 0; i < 10; i++) {
      users.push({
        fname: "Foo",
        lname: "Bar",
        username: `foobar${i}`,
        email: `foobar${i}@gmail.com`,
        profileId: i + 1
      });
    }
    return queryInterface.bulkInsert('Users', users);
  },

  down: function …
Run Code Online (Sandbox Code Playgroud)

javascript seeding sequelize.js

4
推荐指数
2
解决办法
4630
查看次数