我正在寻求解决这个问题的可能解决方案.我将使用Angular和Rails,但实际上这个问题有点抽象,不需要在这些框架的上下文中回答.
在前端管理复杂嵌套SQL关联的最佳实践是什么?
假设您有帖子,评论和评论嵌套在帖子下.您将帖子作为JSON发送到前端,并在其下嵌套注释.现在你可以在每个帖子下面列出它们了,很棒.但随后出现了问题:
如果您还想显示最近的评论怎么办?您的评论服务需要在规范化集合中进行评论,或者以允许按日期排序的方式访问它们.
如果您的数据具有不同的嵌套级别,该怎么办?继续发帖和评论示例.如果您的评论可以回复到10级,该怎么办?
如果我们不只是在讨论帖子怎么办?如果您可以评论照片和其他资源怎么办?
打破这个例子,如果我们谈论的是朋友之间的递归关系怎么办?
我最初的想法和假设的解决方案
我最初的想法以及我如何攻击它是使用缓存层并规范化数据,以便:
递归关系在某些时候需要是有限的,你不能只是永远地继续嵌套.
这当然听起来很棒,但我看到了很多潜在的陷阱,并希望获得观点.我发现很难将抽象的最佳实践从具体的解决方案分离到特定的数据模型.我很想知道其他人如何解决这个问题,以及他们将如何解决这个问题.
谢谢!
我目前正在使用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)