什么时候可以不正常化? [关闭]

2024-02-23

考虑以下关系来说明我的问题:

Person( name, street, city, zipcode )

name -> street , city , zipcode
street + city -> zipcode

因此,如果我们知道这个名字,我们也就知道这个人住在哪里。但邮政编码也(暂时)依赖于街道+城市。因此,这种关系被打破3NF并且应该分成两个表以保持一致。

但在这种情况下,我们对邮政编码作为单独的实体不感兴趣。它是地址的一部分,并且恰好是瞬态相关的。我们永远不会单独使用它。

我明白为什么标准化是一件好事。但真的有必要吗always规范化(从而使数据库更加复杂)?如果没有,你怎么知道什么时候可以跳过它?

(如果我的术语或符号有错误,欢迎您指正)


除了性能之外,未完全标准化的另一个原因可能是数据中存在一定的“模糊性”。

As far as I understand1, ZIP may be specific to a city block or area, which means an especially long street could have more than one ZIP. And even if ZIP did correspond to city+street in US, that might not be true for postal codes in other countries, should you ever decide to go international.

但即使assuming邮政编码确实是特定于城市+街道的,人们可能自己输入地址信息,这意味着他们可能会犯错误,包括错误的邮政编码。因此,对于相同的城市和街道组合,您最终可能会得到两个邮政编码。

完全规范化的数据库根本无法表示这一点 - 您必须选择其中一个 ZIPsomehow。除非您能够访问所有 ZIP 的完整、最新的数据库,否则您没有解决此冲突的好方法。如果您最终选择了错误的 ZIP,all同一个城市+街道上的人会有错误的邮政编码。

另一方面,非规范化数据库会让每个人保留自己的 ZIP,并在以后承受后果隔离中来自其他人。您甚至可以实施自动完成建议并“您确定吗?”如果用户为已有邮政编码的现有城市+街道输入不同的邮政编码,则会发出警告,但如果他表示确定,则让他(或她)继续。


1 And I don't live in US, so I might be off.

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

什么时候可以不正常化? [关闭] 的相关文章

  • 用户评级的 ER 模型

    我有很多 用户 每个用户最多有 5 个 服务 用户应该能够对每项服务进行评分 0 5 我还想保留用户的平均评分 这是我的想法 但是还有更好的方法吗 User id user name dob 服务 固定数量的服务 id service de
  • 数据库、表和列命名约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每当我设计数据库时 我总是想知道是否有命名数据库中项目的最佳方法 我经常问自己以下问题 表名应该是复数吗 列名应该是单数吗 我应该为表或列添加前
  • 如何:SQL 还是 NOSQL?

    我还没有遇到过这个问题 但这就是我的想法 非常肤浅和简单化恕我直言 如果您有键值类型的存储 并且所有访问都是键查找 请使用 NOSQL 解决方案 如果您想要基于值 和子值 进行查找或者有一些更复杂的东西 例如联接 您会选择关系解决方案 事务
  • 创建用于存储高尔夫球成绩的可扩展数据库架构

    我正在尝试设计一个数据库来存储我所有的朋友和我的高尔夫球成绩 您可能知道 高尔夫得分由 18 洞的个人得分组成 我可以想到两种设计模式的方法 创建一个表 每个洞有一列 例如 h1 到 h18 该表具有引用其他表的 FK player id
  • 如何在 SQL 中存储目标(例如 RPG Quest)

    今天有人问我他们应该如何将任务目标存储在 SQL 数据库中 在这种情况下 请考虑角色扮演游戏 目标可能包括以下一些内容 发现 地点 杀死 n MOB 类型 获取 对象 的 n 个 实现 技能组 中的 技能 你在角色扮演游戏中获得的所有其他东
  • Django 选择性转储数据

    是否可以有选择地过滤哪些记录Django的dumpdata管理命令输出 我有几个模型 每个模型都有数百万行 我只想转储一个模型中符合特定条件的记录 以及引用任何这些记录的所有外键链接记录 考虑这个用例 假设我有一个生产数据库 其中我的用户模
  • 为什么要为字符变化类型指定长度

    参考 Postgres 文档字符类型 http www postgresql org docs current static datatype character html 我不清楚指定字符变化 varchar 类型的长度 假设 字符串的长
  • 是否值得为 SqlServer 查找表使用tinyint 而不是 int 呢?

    在 SqlServer 2005 中设计查找表 枚举 时 如果您知道条目数永远不会变得很高 是否应该使用tinyint 而不是 int 我最关心的是性能 尤其是索引的效率 假设您有这些代表性表格 Person PersonId int PK
  • 确定自上次访问 SQL Server 以来的行更改

    我们有一个多用户系统 用户将数据保存到中央 SQL Server 2005 数据库中 我们遇到了一个问题 即一个用户刷新数据库中的更改 而另一个用户保存新数据 我们当前收集更改的方式是每个表上都有一个时间戳列 该列在每行插入 更新时都会填充
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • 从多个表中选择 - 一对多关系

    我有这样的表 表产品 身份证 姓名 表格图像 产品 ID 网址 订单号 表价 产品 ID 组合 货币 价格 表数量 产品 ID 组合 数量 表 Product 与其他表是一对多关系 我需要查询表并得到类似这样的结果 伪数组 ProductI
  • 外键引用多个表

    我有4张桌子 A ida name B ida B specific stuff C ida C specific stuff D ida D specific stuff 我希望另一个表 E 可以仅引用 B 或 C 而不是 D 我可以在其
  • Cassandra 与 ZooKeeper 的事务 - 这有效吗?

    我正在尝试在 ZooKeeper 的帮助下为 Cassandra 实现一个事务系统 由于我认为我在数据库实现方面没有足够的经验 所以我想知道我的想法原则上是否可行 或者是否有任何重大缺陷 以下是步骤的高级描述 识别所有要编辑的行 键 和列
  • 淹没在空无的海洋中

    我继承的一个应用程序跟踪对材料样品执行的实验室测试结果 数据存储在单个表 tblSampleData 中 其主键为 SampleID 并有 235 列代表潜在的测试结果 问题是每个样本仅执行少量测试 因此每行包含超过 200 个空值 实际上
  • 在关系数据库中存储 1:1 用户关系的最佳方式

    存储用户关系的最佳方式是什么 例如友谊 在关系中必须是双向的 你是我的朋友 因此我是你的朋友 数据库 例如MYSql 我可以想到两种方法 每当一个用户与另一个用户成为好友时 我都会向数据库添加两行 其中 A 行由发起用户的用户 ID 和下一
  • MySQL标签中如何存储标签,总共一个字段还是每个标签一个字段?

    我正在开发一个接近 stackoverflow com 的产品 发帖者需要为其问题或任务输入标签 如何将这些标签存储在数据库中 是总共一个字段 列 还是一个标签一个字段 列 我觉得多对多 http en wikipedia org wiki
  • 在 MySQL 数据库中存储图像文件或 URL?哪个更好? [复制]

    这个问题在这里已经有答案了 可能的重复 在数据库中存储图像 是还是否 https stackoverflow com questions 3748 storing images in db yea or nay 数据库中的图像与文件系统中的
  • 限制 sqlite 表的最大行数

    我希望实现一种 活动日志 表 其中用户执行的操作存储在 sqlite 表中 然后呈现给用户 以便他们可以看到他们所做的最新活动 然而 自然地 我觉得没有必要保留每一个历史记录 所以我想知道是否有一种方法可以配置表以在达到最大设置限制后开始修
  • 如何在列上创建外键,该列的每条记录都可能引用多个表之一中的列?

    我正在创建一个社交网络 它有新闻 照片等多个实体 可以有评论 由于所有评论都具有相同的列并且行为方式相同 唯一的区别是它们的类型 新闻 照片或将来添加的其他内容 我决定为所有评论创建一个表 其中的列名为type 它工作得很好 直到我决定将外

随机推荐

  • apache httpclient 未设置基本身份验证凭据

    看一下下面的代码 DefaultHttpClient http new DefaultHttpClient http getCredentialsProvider setCredentials new AuthScope AuthScope
  • 列不允许 DBNull.Value - 禁止 KeepNulls - 正确的列映射

    我正在使用 c 和 NET 4 5 2 推送到 SQL Server 2017 14 0 1000 169 在我的数据库中 我有一个带有 DateAdded 字段的表 其类型为DateTimeOffset 我正在尝试使用以下代码进行批量复制
  • C# 和 JavaScript 之间的时间跨度差异说明

    这是基于在 C 中计算 1970 年以来的毫秒数会产生与 JavaScript 不同的日期 https stackoverflow com q 22081128 1346943 and Javascript Date getTime 的 C
  • 简单游戏的 Canvas 与 SVG

    如果我想构建一个简单的游戏 贪吃蛇 西洋跳棋 吃豆人或其他游戏 什么是更好的方法 SVG 还是 Canvas 我感兴趣的事情 易于实施 Canvas 与 SVG 的学习曲线 例如 如果 SVG 的教程和社区支持明显减少 这对我来说至关重要
  • 从 jQuery 加载 symfony 2 目录中的 php 文件

    我在捆绑包内的树枝文件中有这行代码 jQuery BundleDir Bundle views mapname index html twig datacount load getDataCount php 我的问题是我需要将 getDat
  • 如何使用 jquery 操作查询字符串

    我有一个选择下拉列表 其中 id 映射到值 在 onChange 事件中 我想重定向到相同的 url 但将 id value 附加到查询字符串 如何检查此 id 选项是否已存在于查询字符串中 我不需要多个值 并根据需要替换 附加 我如何检查
  • 使用带有用户名和密码的 http 进行 Git 克隆

    我尝试使用 git 克隆http 用户 电子邮件受保护 http user password host com但我在添加用户或密码时遇到一些问题 因为用户使用的电子邮件包含其他 而密码使用感叹号 该命令看起来像http 电子邮件受保护 电子
  • PharData extractTo方法在linux环境下提取.tar.gz失败

    我想将 tar gz 文件提取到特定文件夹中 我使用 cURL 从 MailChimp 批量操作下载 tar gz 文件 我使用下面的代码来提取 tar 文件 phar new PharData upload test tar gz pha
  • 如果调用者返回太早,则异步 AWS Lambda 不会执行

    我正在尝试调用异步 lambda 函数within另一个 lambda 函数 我发现如果调用函数退出得太快 它就不会被执行 换句话说 以下内容永远不会起作用 LambdaFunction2 永远不会被调用 function lambdaFu
  • 在 OpenCV 中更新 Mat 的子矩阵

    我正在使用 OpenCV 和 C 我有一个像这样的矩阵 X Mat X Mat zeros 13 6 CV 32FC1 我只想更新它的一个 4x3 子矩阵 但我对如何有效地访问该矩阵存有疑问 Mat mat43 Mat eye 4 3 CV
  • 恢复备份mysql

    我在 mysql 中有一个 250MB 的数据库备份 如何将其恢复到另一台服务器上的新数据库中 或者只是使用php我的管理员为了恢复海豚
  • 分组数据框中日期范围重叠

    我如何知道两行的日期范围是否重叠 输入数据框 A B Start End Timestamp A1 B1 2022 01 15 2022 02 15 2021 05 17 A1 B1 2021 07 15 2021 10 17 2021 0
  • 在 Excel 中设置文本字符串列表的格式

    我正在尝试将 Excel 中出现的单词列表的字体变成红色 到目前为止 我能够找到一个单词 但我需要搜索整个数组 我是 VBA 新手 正在苦苦挣扎 到目前为止 我已经找到了一个解决方案 但它涉及查找单个字符串 F1 Sub test4Stri
  • 获取隐藏元素的偏移量

    如何获取隐藏元素的坐标 offset 不支持使用隐藏元素 有什么提示吗 如果你的元素有 hide 调用它 或者如果它有display none在CSS中 浏览器根本不费心去渲染它 在这种情况下 答案不是直接的 在最近的jQueries中 你
  • 在 Parse.com Cloud 代码 beforeSave 函数中访问原始字段

    最终目标是使用以下方法检测现有 Parse 对象和传入更新之间的更改beforeSave云代码中的函数 从 parse com 提供的 Cloud Code 日志中 我们可以看到以下内容的输入 beforeSave包含一个名为origina
  • cudart_static - 什么时候有必要?

    由于较新的驱动程序附带 CUDA 运行时 我可以在驱动程序下载页面中选择 9 1 或 9 2 我的问题是 我的库 内部使用 CUDA 内核 是否应该附带 lcudart static 我在使用 9 1 CUDA 驱动程序的系统上启动使用 9
  • 如何更改 catalina.out 的路径?

    我无法找到移动的设置catalina out记录到 var log jira 我成功设置了以下文件的路径access log log catalina log host manager log localhost log and manag
  • Python中是否可以动态生成命令Click

    我正在尝试生成click来自配置文件的命令 本质上 这个模式 import click click group def main pass commands foo bar baz for c in commands def f print
  • 使用正确的权限在 ASP.NET/C# 中启动服务

    在我的网站 用 ASP NET C 编写 上 我希望管理员能够启动某个服务 我为此的代码是 ServiceController svcController new ServiceController InvidualFileConversi
  • 什么时候可以不正常化? [关闭]

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