关系数据建模与非关系数据建模

2024-03-10

我有一个用户数据库,每个用户具有以下属性:

  • user
  • id
  • name
  • zip
  • city

In a 关系型数据库我会在表格中对其进行建模user:

  • user
  • id
  • name
  • 位置 ID

并有第二个表称为location:

  • location
  • id
  • zip
  • city

and location_id是指向条目的外键(引用)location table.

优点是,如果某个城市的邮政编码发生变化,我只需更改一个条目。

让我们去非关系数据库,比如 Google App Engine。在这里,我将按照规范对其进行建模。我有一种user:

class User(db.Model):
    name = db.StringProperty()
    zip = db.StringProperty()
    city = db.StringProperty()

优点是我不需要连接两个表,但缺点是如果邮政编码发生更改,我必须运行一个脚本来遍历所有用户条目并更新邮政编码,对吗?

Google App Engine 中还有另一个选项,那就是使用ReferenceProperties。我可以有两种,user and location:

class Location(db.Model):
    zip = db.StringProperty()
    city = db.StringProperty()

class User(db.Model):
    name = db.StringProperty()
    location = db.ReferenceProperty(Location)

我的模型与关系数据库中的模型完全相同。

难道是我刚才做错了?

这是否会破坏非关系数据库的所有优势?

为了获取邮政编码和城市的值,我必须运行第二个查询。但在另一种情况下,要更改邮政编码,我必须遍历所有现有用户。

在像 Google 数据存储这样的非关系数据库中,这两种建模可能性有何含义?

这两种方法的典型用例是什么——我什么时候应该使用其中一种,什么时候应该使用另一种?


根据我的经验,最大的区别是非关系数据存储迫使您根据查询方式(由于缺乏联接)以及写入方式(由于事务限制)进行建模。这当然会导致模型非常非规范化。过了一会儿,我开始定义所有的查询first,以避免以后必须重新考虑模型。

由于关系数据库的灵活性,您可以单独考虑每个数据系列,在它们之间创建关系,并最终按照您的意愿进行查询(在很多情况下滥用联接)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关系数据建模与非关系数据建模 的相关文章

  • 将 Grails 应用程序移植到 GAE

    我目前正在评估一个 Grails 应用程序是否移植到 Google App Engine 我想了解以下方面的经验 Acegi 安全性 应用程序依赖此库来增强安全性 更新 刚刚了解到它基于 hibernate 因此无法移植 有推荐的替代品吗
  • Google App Engine 和 Google Cloud Run 有什么区别?

    有谁知道 Google App Engine Flex 和 Google Cloud Run 之间的区别 Thanks Cloud Run 文档信息还不是很丰富 但新视频我应该在哪里运行我的代码 从 5 个以上计算选项中进行选择 Cloud
  • 在谷歌应用程序引擎中使用低级 API 进行数据存储?是不是很糟糕?

    关于如何使用数据存储的低级 api 的文档很少 而关于 JPA 和 JDO 以及如何转换为 JPA 和 JDO 的文档却很多 我的问题是 根据 JPA 或 JDO 规范进行编码而不是直接访问数据存储的低级 api 有什么优势吗 乍一看 这似
  • 如何在 BlobStore 中设置文件名属性?

    我正在以编程方式上传图像文件并想要设置文件名 当我通过 POST 上传文件时 文件名属性会自动设置 但是 当使用下面的方法时 文件名未设置 image urllib2 urlopen url file name files blobstor
  • 使用 Google App Engine 的 Mako 模板

    我想在 GAE 中使用 Mako 模板而不是 Django 模板 我找到了这个帖子http blog pansapiens com 2008 06 24 mako templates in google app engine seems t
  • gwt 谷歌应用引擎 HTTP 错误 404

    我在 Eclipse 中使用 google 应用程序引擎创建了一个新的 gwt 项目 但是当我运行该项目时 在浏览器中我收到以下消息 HTTP 错误 404 访问 Test html 时出现问题 原因 NOT FOUND 由码头提供动力 现
  • App Engine 上的 HTTP 到 HTTPS 重定向灵活

    我已经遵循了这个答案 在谷歌云中从http重定向到https https stackoverflow com questions 37135051 redirect from http to https in google cloud但目前
  • 如何将 Firebase 身份验证与 Google 应用引擎端点集成

    我正在为移动应用程序编写一个后端服务器 后端在谷歌应用程序引擎上运行并用Java编写 我希望用户能够使用联合身份 例如 facebook 登录 我看到谷歌通过 firebase 身份验证支持移动应用程序的这种身份验证 将 firebase
  • 通过端点 API 将图像读入 protorpc 消息

    将用户的图片接收到我的 endpoints method我用吗messages BytesField as in image messages BytesField 1 stuff messages StringField 2 是的 这是正
  • GAE是无状态的吗?有什么影响?

    我曾经被告知 GAE 是无国籍的 我总体上理解无状态的概念 但我可以使用一些指导来从概念上将其应用于 GAE 类型的系统 我专门问这个问题是因为我开发的一个应用程序似乎存在干扰问题 也就是说 当两个或更多人同时使用它时 它就会变得混乱 我正
  • Mysql对三表多列的连接查询

    我有三个这样的表 专业化 sid s name 1 test 1 2 test 2 Person pid name sid 1 ABC 1 2 XYZ 2 Timing tid time from time to pid 1 08 00 0
  • 如何将reportlab与Google应用程序引擎一起使用

    我无法在谷歌应用程序引擎下正确导入reportlab 根据以下guide http blog notdot net 2010 04 Generating PDFs on App Engine Python and introducing M
  • 发布 ndb StructuredProperty _Message__decoded_fields

    我的问题 我正在尝试使用 POST 请求填充 GAE 中包含 ndb Structured Property 的数据存储模型 这个问题最近被问过但没有得到解答 如何 发布 ndb StructuredProperty https stack
  • 从其 BlobKey 获取 Google Cloud Storage 文件

    我编写了一个 Google App Engine 应用程序 它利用 Blobstore 来保存以编程方式生成的数据 为此 我使用了文件API https developers google com appengine docs java b
  • 关系数据库和图数据库的比较

    有人可以向我解释一下 MySQL 等关系数据库与 Neo4j 等图形数据库相比的优缺点吗 在 SQL 中 您有多个表 它们之间有不同的 id 链接 然后你必须加入来连接表 从新手的角度来看 为什么要将数据库设计为需要联接 而不是像图形数据库
  • NoSuchMethodError:将 Firebase 与应用程序引擎应用程序集成时

    我试图将 firebase 实时数据库与谷歌应用程序引擎应用程序集成 我在调用时收到此错误 gt DatabaseReference ref FirebaseDatabase gt getInstance gt getReference t
  • 谷歌应用程序引擎nodejs本地开发

    有没有办法在本地运行我的nodejs应用程序 以便我可以模拟在生产App Engine中运行的应用程序而无需部署它 由于某种原因 我的应用程序在 Google App Engine 中的行为与我的本地主机不同 我厌倦了每次为了查看是否存在错
  • 在关系数据库中存储树结构的已知方法有哪些? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict

随机推荐

  • 从头开始创建 LinkedList 类

    我们的任务是从头开始创建一个 LinkedList 但绝对没有任何读物来指导我们完成这项令人偏头痛的任务 而且网上的所有内容似乎都只是使用 Java 内置的 LinkedList 方法和东西 无论如何 当使用 Java 的默认内容时 链表非
  • 使用 pandas 将 JSON 输出为 CSV

    我正在尝试转换以下内容 json文件至 csv使用熊猫 输入 json 文件名 my json file json profile set doc type PROFILE key 123 mem list mem num 10001 cu
  • 正确生成带有特殊字符的站点地图 XML

    我有一个程序可以为 Google 网站管理员工具 除其他外 生成 XML 站点地图 GWT 给我提供了某些站点地图的错误 因为 URL 包含字符序列 如 等 站点地图规范说 https www sitemaps org protocol h
  • “interface”关键字是否从 Dart 中删除了?

    只是为了确定 Dart 是否删除了显式定义interface现在赞成通过隐式定义它abstract 我看到它提到Dart 和接口隔离原则 https stackoverflow com questions 20791286 dart and
  • 对列表中的每个 Id 进行多个 RestTemplate 调用

    我需要制作多个RestTemplate要求每个Id in a List
  • 编写指向其实现者的通用接口的便捷方法

    java中是否有一种编写通用接口的方法 以更方便的方式向此类接口的实现者指出 例如我写的接口 public interface Updatable
  • Mysql2::错误(用户'root'@'localhost'访问被拒绝(使用密码:NO)):

    只需在 CentOS 5 服务器 apache passenger 上使用 mysql mysql2 gem 设置一个新的 Rails 3 1 3 应用程序 我已经正确设置了一个数据库和该数据库的用户 并且我已将登录名和信息添加到我的数据库
  • 防止 TextView 中出现不需要的换行

    尽管设置如此 我的文本视图仍在换行文本lines 1 and ellipsise end 除了防止换行手出现带有 的文本省略号之外 我还需要做什么
  • 带 INNER JOIN 的 SQL DELETE

    有2张桌子 spawnlist and npc 我需要从中删除数据spawnlsit npc templateid n idTemplate是唯一 连接 表格的东西 我已经尝试过这个脚本 但它不起作用 我已经尝试过这个 DELETE s F
  • 如何在 unix 中解压 tar.bz 文件?

    我发现大量页面说明如何解压缩 tar bz2 文件 但是如何解压缩 tar bz 文件呢 use the j的选项tar tar xjf path to archive tar bz
  • 调用database.rawQuery时Android SQLiteMisuseException

    我在 Android 应用程序中使用 SQLite 数据库 有时在调用 database rawQuery String sql String SelectionArgs 时会收到 SQLiteMisuseException 这很奇怪 因为
  • 在 Canvas 上绘制两个 3D 字符串?

    我必须在画布上绘制 2 个字符串 字符串必须使用相同坐标第二根弦必须是第一根弦绕 Y 轴旋转 45 度的结果 结果必须如下所示 这是我的代码 Matrix matrix new Matrix matrix canvas getMatrix
  • 创建具有最大行数的表 (ORACLE)

    Oracle建表时有没有办法限制最大行数 如果表有数字键 您可以添加一个检查约束 声明该键不超过特定值 ALTER TABLE turnip ADD CONSTRAINT check turnip id CHECK turnip id lt
  • 如何在 Rust 中模拟特定方法而不是所有方法?

    我在确定目标结构的方法的单元测试时遇到了麻烦 我有一个方法random number根据结构体的属性返回一个随机值 还有另一种方法plus one它获取第一个方法的结果并用它做一些事情 pub struct RngTest pub attr
  • Flutter Google Maps - 根据行驶方向旋转标记

    任何人都可以分享 Flutter 谷歌地图插件的文档 代码示例 我可以在其中根据行驶方向旋转标记 例如 汽车图标 我看到这可以通过旋转标记在本机库上实现 但在 Flutter 中找不到任何旋转标记的选项 我想我们在旋转标记时需要考虑以下几点
  • 匹配 gtksourceview 中的整个字符串

    使用这个简短的 XML 片段在 gtksourceview 中定义字符串
  • XACML 3.0 和多种资源

    我试图弄清楚如何使用 Balana 的 XACML 实现来实现授权机制 WSO2 的权利引擎基于 Balana 当用户请求访问单个资源时 例如 鲍勃想要阅读医疗记录 事情就很简单了 然而 假设鲍勃想要阅读他所有患者的医疗记录 这里的第一个问
  • SQLite 异常:SQLite 忙

    任何人都可以提供有关此错误的任何信息 我正在尝试使用 Objective C 插入表 当我这样做时 我收到错误 SQLite Busy 为什么会发生这种情况 如果在调用 sqlite3 函数时得到错误代码 SQLITE BUSY 这意味着根
  • 使用 VBScript 的 IE8 兼容模式

    是否可以使用 VBScript 设置和检查 IE8 中的兼容模式 根据定义文档兼容性 http msdn microsoft com en us library cc288325 VS 85 aspx文章 有文档 文档模式 http msd
  • 关系数据建模与非关系数据建模

    我有一个用户数据库 每个用户具有以下属性 user id name zip city In a 关系型数据库我会在表格中对其进行建模user user id name 位置 ID 并有第二个表称为location location id z