这是在关系数据库中对地址信息进行建模的好方法吗?

2024-03-22

我想知道这是否是一个好的设计。我有许多需要地址信息的表(例如街道、邮政编码/邮政编码、国家/地区、传真、电子邮件)。有时同一个地址会重复多次。例如,可以针对供应商存储地址,然后在发送给他们的每个采购订单上存储地址。然后,供应商可以更改其地址,任何后续采购订单都应具有新地址。它比这更复杂,但这是一个示例要求。

选项1 将所有地址列作为属性放在各个表上。创建采购订单时,将供应商的详细信息复制到采购订单中。可能存储多个副本

选项2 创建一个单独的地址表。拥有从供应商和采购订单表到地址表的外键。仅允许在地址表上插入和删除,因为更新可能会超出您的预期。然后我会有一些计划任务,从地址表中删除不再被任何内容引用的任何行,这样就不会留下未使用的行。也许对地址表中的所有非 pk 列也有一个唯一的约束,以阻止重复。

我倾向于选项2。有更好的方法吗?

编辑:我必须保留采购订单上发送时的地址。另外,它比我建议的要复杂一些,因为可能有送货地址和帐单地址(还有一堆其他包含地址信息的表)。

一段时间后,我会根据日期批量删除旧的采购订单。在此之后,我打算对不再被任何东西引用的任何地址记录进行垃圾收集(否则感觉就像我正在创建泄漏)。


我实际上用它作为我的面试问题之一。以下是一个很好的起点:

Addresses
---------
AddressId (PK)
Street1
... (etc)

and

AddressTypes
------------
AddressTypeId
AddressTypeName

and

UserAddresses (substitute "Company", "Account", whatever for Users)
-------------
UserId
AddressTypeId
AddressId

这样,您的地址完全不知道它们是如何使用的,并且您的实体(用户、帐户)也不直接了解有关地址的任何信息。这完全取决于您创建的链接表(在本例中为 UserAddresses,但您可以执行适合您的模型的任何操作)。

对于可能很大的数据库,有一个有点矛盾的建议:继续将“主”地址直接放在您的实体上(在本例中为“用户”表中)以及“HasMoreAddresses”字段。与仅使用上面的干净设计相比,这似乎很棘手,但可以简化典型用例的编码,并且非规范化可以对性能产生很大的影响。

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

这是在关系数据库中对地址信息进行建模的好方法吗? 的相关文章

  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • 什么是“数据库实体”以及哪些类型的 DBMS 项目被视为实体? [关闭]

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

    假设我有两张表 已知营业时间 ChargeNum CategoryID Month Hours 111111 1 2 1 09 10 111111 1 3 1 09 30 111111 1 4 1 09 50 222222 1 3 1 09
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • 没有提示指令的直连接中表的顺序是否会影响性能?

    所有基于 SQL 的 RDBMS 10 年前的版本 直接连接查询 没有提示指令 中的表顺序是否会对最佳性能和内存管理产生影响 听说最后一个join应该是最大的表 您的数据库的查询优化器如何处理这种情况 回答你的问题 是的 表的顺序在连接中有
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • SQL:如何从一个表中获取另一个表中每一行的随机行数

    我有两个数据不相关的表 对于表 A 中的每一行 我想要例如表 B 中的 3 个随机行 使用光标这相当容易 但速度非常慢 那么我该如何用单个语句来表达这一点以避免 RBAR 呢 要获得 0 到 N 1 之间的随机数 可以使用 abs chec
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • 更改表添加列并在同一条件 IF 语句中更新新列

    我正在尝试添加列并在同一 if 语句中更新它 BEGIN TRAN IF NOT EXISTS SELECT 1 FROM sys columns WHERE Name N Code AND Object ID Object ID N Te
  • SQL Server 中离线索引重建和在线索引重建有什么区别?

    重建索引时 有一个选项ONLINE OFF and ONLINE ON 我知道当ONLINE模式打开时 它会复制索引 切换新查询以利用它 然后重建原始索引 使用版本控制跟踪两者的更改 如果我错了 请纠正我 但是 SQL 在离线模式下会做什么
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 总和和不同不会改变结果?

    我是一个新手 试图在这里解决这个问题 到目前为止还没有运气 非常感谢任何帮助 Select Distinct AB agency no ab branch no AS AGENCY BRANCH count AB agency no ab

随机推荐

  • 禁用 EclipseLink 缓存

    在我的应用程序中 当用户登录系统时 系统从数据库读取一些设置并将它们存储在用户的会话中 系统使用 EclipseLink JPA 2 0 通过 JPA 查询执行此操作 当我更改数据库中的某些设置并再次登录时 查询将返回以前的结果 Eclip
  • 定期调用 Android 服务 [GoodApporach?]

    我的要求是 Android 应用程序必须每隔一小时 可配置 向服务器发送用户位置详细信息 纬度和经度 我遵循的方法是使用警报管理器 我以配置的时间间隔调用我的服务 无论应用程序是否正在运行 该服务都会将位置详细信息发送到服务器 这是一个好方
  • URLWithString 对于资源路径返回 nil - iphone

    由于某种原因获取资源的 URL 时出现问题 此代码位于 viewDidLoad 中 并且可以在其他应用程序中使用 但由于某种原因不能在此处使用 NSString audioString NSBundle mainBundle pathFor
  • 升级到 Xcode 5.0.2:xib 警告。属性不可用

    我最近升级到了 xcode 5 0 2 现在 当我构建 Cocoa 应用程序时 我收到此警告 属性不可用 在 10 8 之前的 Mac OS X 版本上使用当前宽度作为最大布局宽度 我尝试找到 最大布局宽度 但无法找到 我该如何摆脱这个警告
  • ES6的导出和花括号

    我看到聊天频道中发布了一段代码 他的代码的最后是 export UserInformation 有些团体表示语法错误 有人说只要变量存在就可以 那么哪一组是正确的呢 我也是第一次见到这种语法 我在导出时从未见过花括号 我只在导入时使用过它们
  • 使用 PHP 测试 FTP 连接

    我正在使用下面的 PHP 脚本来测试 FTP 连接 目前 如果连接成功 它正在打印文件数组 如果能够连接 如何让它也显示消息 就像 连接成功 一样 con ftp connect server or die Couldn t connect
  • 如何将 facebook 测试页面订阅到 facebook apps webhook

    我正在创建聊天机器人并想在 Facebook 上建立联系 我想在我的页面中测试我的信使聊天机器人 但我必须首先进行应用程序审查和业务验证 但我不想这样做 因为我刚刚开发了我的聊天机器人 或者你可以说这是暂存环境 I found that w
  • Python:将参数传递给 threading.Thread 实例的正确方法是什么

    我扩展了 threading Thread 我的想法是做这样的事情 class StateManager threading Thread def run self lock state while True lock acquire se
  • 如何用 Canvas 绘制曲线动画?

    我有很多点想慢慢画出来 我尝试 setTimeOut 以及由此产生的效果tutorial http www html5canvastutorials com advanced html5 canvas linear motion anima
  • 如何从 MySQL 检索 JSON 数据?

    我有下表及其关系 我将 JSON 数据存储在 client services 表中 他们有什么方法可以使用 MySQL 查询检索 JSON 值 如下所示 SELECT getJson quota as quota client id FRO
  • 在 tkinter 文件对话框中指定文件路径

    我有一个文件对话框来打开文件 但是 我要打开的文件与我编写的程序位于不同的目录中 文件对话框打开到我所在的目录 有没有办法指定文件对话框打开的位置 这是相关代码 root Tk root fileName tkFileDialog asko
  • 调整通话状态栏的大小?

    如何根据笔尖上的通话状态栏调整视图大小 我认为它只是设置调整大小属性 但它们没有为根 UIView 启用 我认为我的主要问题是我不知道这一切叫什么 除了谈论模拟器菜单命令之外 我在任何文档中都找不到对通话中状态栏的任何引用 iOS 将调用你
  • Kendo Grid:如何在一个单元格中显示 List

    我尝试迭代列表并将所有元素显示到列中的单元格中 但我无法使其正常工作 这是我到目前为止所拥有的 在网格定义中 columns Bound x gt x locationList Title Locations Included Client
  • 在 Windows 上运行 libxlsxwriter

    我正在尝试使用libxlsxwriter 但我似乎可以让事情正确编译或运行 我按照 Windows 的说明使用Mingw w64 and msys2可以在这里找到 http libxlsxwriter github io getting s
  • 减少小程序加载时间

    我有一个 html 文件 其中包含一个作为小程序的 jar 文件 当我打开 html 文件时 加载小程序的时间太多了 有什么方法可以减少加载时间吗 这里有三个主要因素在起作用 1 Java 启动时间 冷启动过去需要 5 10 秒 但是随着J
  • 如何修复 Mavericks 上 Gemfile 中的 libv8 错误?

    当我跑步时bundle install I get An error occurred while installing libv8 3 11 8 17 and Bundler cannot continue Make sure that
  • 在准备好的语句中使用 COLLECT() 时,为什么会收到“ORA-00932:不一致的数据类型:预期 - 得到 -”?

    我将此查询与Perl DBI https metacpan org module DBI SELECT c change id COLLECT t tag AS the tags FROM changes c LEFT JOIN tags
  • Cassandra 返回数值的无序结果集

    我是 No SQL 新手 刚刚开始学习 Cassandra 我有以下问题要问 我创建了一个包含一列的简单表来了解 Cassandra 分区和集群 并尝试在插入后查询所有值 我的表结构 create table if not exists m
  • SQL Server 如何将 5 分钟的间隔重新组合为 15 分钟的间隔?

    我正在建立一个网站 您可以在其中在线预约 我不会详细解释所有内容 但我有一张桌子 上面有我可以预约的时间 以 5 分钟为间隔进行分配 这是一个例子 ID StartDate EndDate 492548 2016 12 16 08 00 0
  • 这是在关系数据库中对地址信息进行建模的好方法吗?

    我想知道这是否是一个好的设计 我有许多需要地址信息的表 例如街道 邮政编码 邮政编码 国家 地区 传真 电子邮件 有时同一个地址会重复多次 例如 可以针对供应商存储地址 然后在发送给他们的每个采购订单上存储地址 然后 供应商可以更改其地址