不同数据的单独链接/关联表?

2024-03-16

哪种设计方法更好:为数据库中的每种数据类型建立单独的链接/关联表,还是将通用标识合并到公共链接/关联表中?

因为如果没有例子这个问题真的没有意义......

假设我有一个数据库,其中包含作者和书籍的数据(使用人们可以轻松掌握和识别的示例)。为了简单起见,每个表格如下所示:

Authors

Id
Name

Books

Id
作者ID
Title
ISBN

我决定将这两组数据的链接包含到其他系统(Amazon、Barnes & Noble、Books-A-Million 等)中。我已经为 LinkTypes、LinkSources 和 LinkBases 创建了表:

链接类型

Id
姓名(例如书籍、作者)

链接源

Id
名称(例如 Amazon、B&N 等)

链接库

Id
链接类型ID
链接源ID
UrlBase(例如,http://www.amazon.com/book.html?id= http://www.amazon.com/book.html?id={0})

以及实际链接的表格:

Links

Id
链接类型ID
链接源ID
ReferenceValue(该值被替换到关联的 UrlBase 中以创建实际链接)

到目前为止,我一直在考虑为与作者和书籍相关的链接创建单独的表。这些表格看起来像:

作者链接

AuthorId
LinkId

对于两种不同类型的数据来说,这可能没问题,但是当我决定扩展数据库以包括出版商、讨论组、流派以及我可以提供可用链接的任何其他类型的数据时,会发生什么情况?这仍然是好的设计吗(或者一开始就是好的设计)?

我正在考虑的一个选项是修改 Links 表以包含 AssociationId 列,该列不与特定类型的数据绑定,但将用于建立必要的链接。这种方法消除了单独的关联表,但从长远来看,它可能会给设计带来一定程度的混乱。

有什么想法更好的设计吗?如果我需要提供更多详细信息,请告诉我。


我问了一个类似的问题并得到了一些有趣的答复:多个实体的通用一对多表 https://stackoverflow.com/questions/2862918/common-one-to-many-table-for-multiple-entities

我认为最好的解决方案是使用继承。创建一个代表作者、书籍或任何其他可能有链接的抽象实体(我将其称为“项目”,但我确信有更好的名称)。你最终会得到这样的结果:

Item      Author    Book       LinkBase        Link
=======   =======   =========  ==========      ========
ItemID    ItemID    ItemID     LinkBaseID      LinkBaseID
          Name      AuthorID   LinkTypeId      ItemID
                    Title      LinkSourceId    ReferenceValue
                               ReferenceValue

我认为你不需要LinkSourceID on the Link表,因为您已经有一个返回到的链接LinkBase其中包含LinkSourceID.

我的另一个想法是,如果引用完整性很重要,那么您可能希望避免第二个选择,因为您无法在您的数据库上维护外键。Links具有泛型的表AssociationID.

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

不同数据的单独链接/关联表? 的相关文章

  • 多种类型实体的数据库设计

    我需要开发一个应用程序 其中有 4 种类型的用户实体 管理员 合作伙伴 公司和客户 每种用户类型都有自己的一组详细信息 并且他们都应该能够执行常见操作 例如发送消息 付款等等 这些操作应保留在单个表中 但它们需要引用确切的用户 无论其类型如
  • MongoDB 中的双向嵌入与单向嵌入(多对多)

    我想与您讨论一下 在 MongoDB 中建模 N M 关系时 使用双向嵌入而不是单向嵌入是否有意义 假设我们有两个实体 AProduct可以属于许多 少数 类别 and a Category可以有很多 很多 Products 两种方式嵌入
  • 在数据库中存储有序列表的最佳方法?

    在数据库中存储 有序列表 以便轻松更新它们 添加 删除和更改条目顺序 的最佳方法是什么 考虑一个数据库 其中有一个用户和电影表 每个用户都有一个最喜欢的电影列表 由于许多用户可能喜欢同一部电影 因此我将用户和电影分开表 并使用第三个表 us
  • 使用 MySQL 实现物化视图(汇总表)的首选方法

    我正在工作中开发一个项目 我需要为其创建和维护汇总表出于性能原因 我相信正确的术语是物化视图 我这样做有两个主要原因 非规范化 我尽可能地规范化表格 因此 在某些情况下 我必须连接许多表才能提取数据 我们使用 MySQL Cluster 它
  • HBase:创建多个表或包含多个列的单个表?

    什么时候创建多个表而不是创建具有大量列的单个表才有意义 据我了解 表通常只有几个列族 1 2 每个列族可以支持 1000 多个列 当 HBase 似乎在单个表中可能存在大量列时表现良好时 什么时候创建单独的表才有意义 在回答问题本身之前 让
  • 对于依赖于时间的大型数据集,命名表 september_2010 是否可接受且有效?

    我每天需要存储大约 73 200 条记录 由 3 个数据点组成 id 日期和整数 我团队的一些成员建议使用月份作为表名称 september 2010 创建表 而其他人则建议使用一个包含大量数据的表 关于如何处理如此大量的数据有什么建议吗
  • 数据库设计 - 是否应该避免一对一关系? [复制]

    这个问题在这里已经有答案了 可能的重复 是否存在使用数据库 1 1 关系有意义的时候 https stackoverflow com questions 517417 is there ever a time where using a d
  • 数据库关系 1:1 vs 1:0..1

    我正在努力了解这些关系 正如我下面所示 它是否正确 1 我会有一个1 0 1通过简单地使父级的身份密钥也是子级的身份密钥来建立关系 2 为了做到这一点1 1 我在父表中添加一个FK 连接两个Identity列 这就是全部内容了吗 如果我的措
  • JSONB 会让 PostgreSQL 数组变得无用吗?

    假设您想在对象 例如帖子 上存储 标签 在 9 4 版本中 您有 3 个主要选择 标签作为文本 标签为 jsonb 标签作为文本 并且您将 JSON 字符串存储为文本 在许多情况下 第三个是不可能的 因为它不允许对 标签 值进行条件查询 在
  • 标签系统:Toxi 解决方案问题

    我对标签数据库模式的 Toxi 解决方案感到有点困惑 我正在开发一个系统 用户可以向该系统提交项目 并且这些项目可以具有与其关联的标签 在阅读了 tagchemas 后 我发现 Toxi 解决方案最适合我的需求 但是 我不完全确定我的计划是
  • 数据库优化命令

    在用户可以下订单的数据库中 最好有一个包含地址的新表 还是每个订单的标题中都有地址数据 这不仅涉及用户 及其地址 还涉及您所销售产品的价格和其他信息 这些信息可能会发生变化after订单已下达 但订单本身必须保持完整 一般来说 有两种方法
  • 数据库中的 GUID 类型

    GUID不是数据库中的正式数据类型 在我们现有的 SQL Server 设计中 Uniqueidentifier类型用于GUID价值 现在我们正在切换到Sybase数据库 我们应该使用varchar 36 来代替那个Uniqueidenti
  • 创建数据库索引的最佳实践和“经验法则”有哪些?

    我有一个应用程序 它循环访问数据库表中的大量记录 并对该数据库中的记录执行大量 SQL 和 Net 操作 目前我在 PostgreSQL 上使用 Castle ActiveRecord 我在几个字段上添加了一些基本的 btree 索引 正如
  • 如何定义基于标签的组织结构?

    原标题 有没有办法在基于标签的组织方法上强制建立关系结构 我有一些实体 它们有一系列属性 一些属性影响实体可以具有的其他属性 许多属性被组织成组 并且有时实体被要求具有来自某些组的一定数量的属性 或者可能具有来自某些组的一定范围的属性 有没
  • 如何设计多租户mysql数据库[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设我需要设计一个数据库来托管多个公司的数据 现在 出于安全和管理目的 我需要确保不同公司的数据正确隔离 但我也不想启动 10 个 m
  • 数据库、表和列命名约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每当我设计数据库时 我总是想知道是否有命名数据库中项目的最佳方法 我经常问自己以下问题 表名应该是复数吗 列名应该是单数吗 我应该为表或列添加前
  • 在 django 中创建“历史”类型模型的最佳方法是什么?

    我想为我的 Django 应用程序创建一个类似于 Django 管理员的 最近操作 的功能 以便存储其他模型的历史信息 例如 假设我有两个模型 分别称为 Book 和 Author 我想要第三个模型来存储信息 例如由谁以及何时对模型中的给定
  • 仅包含主键和外键的数据库表的用途是什么?

    我试图理解一个简单的音乐数据库设计 有些表只包含外键和主键 我不确定如何以及何时使用这些表或向其中插入什么内容 设计如下 Track id primary key title duration live performance true o
  • 创建用于存储高尔夫球成绩的可扩展数据库架构

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

    我有4个子类 Video Image Note and Form 每一项都包含不同类型的数据 例如 Image类包含磁盘上图像文件的路径和图像属性 以及Form类包含表单字段值 然而 每个项目之间的共同元素是 GPS 坐标和航向 因此我有以

随机推荐

  • 使用外部模块的类型增强模块声明

    Context 我正在为 NativeScript 制作一个 React 渲染器 即允许您使用 React 声明 NativeScript UI 的库 并且我想为其提供类型 React 的类型已经完全支持 React DOM 即自始至 终都
  • 如何将 sha1() 密码转换为 FOSUserBundle?

    我有一个遗留应用程序 可以使用以下命令对密码进行加密sha1 功能 无盐 现在该网站正在转换为 Symfony2 和 FOSUserBundle 我如何将它们转移到新数据库 我有同样的问题 只需像 iamdto 所解释的那样覆盖编码器 ap
  • 在 ReSharper 中禁用 C# 6.0 支持

    在使用ReSharper时 它建议 为此项目启用C 6 0支持 我愚蠢地点击了它 现在正如广告所宣传的那样 它为我提供了 C 6 0 的建议 然后给了我错误 因为我在这个项目中没有使用 C 6 0 如何禁用 C 6 0 支持 使其恢复到之前
  • 如何在同一个项目中拥有 iOS 应用程序和 OS X 应用程序?

    我见过这个问题 https stackoverflow com questions 4872541 is it possible to have both an ios app and mac app in the same project
  • 可以安装 EGit:缺少要求:Git Team Provider Core

    所以我将 Coldfusion Builder 与 Ecplise 结合使用 我正在尝试在其中安装 EGit 以便我可以执行 Git 操作 我唯一能安装的是 EGit 0 11 1http download ecplise org rele
  • 如何使用 HTML 输入文件类型限制文件类型?

    如何使用 HTML 输入文件类型限制文件类型 我有这个
  • 编程错误:在 django 中同时使用 order_by 和 unique 时

    我有一个如下所示的模型 class ProductScore models Model client models ForeignKey User created models DateTimeField default datetime
  • Django 复合/嵌套/子表单?

    我正在寻找这些 Django 的更新版本超级形式 http code djangoproject com ticket 3706 似乎无法让它在 Django 1 2 中工作 特别是 我希望它能够与 ModelForms 一起使用 我的用例
  • 存储和查询气象数据大数据集的更好方法是什么

    我正在寻找一种便捷的方式来存储和查询大量气象数据 几TB 有关问题中间数据类型的更多信息 之前我一直在寻找 MongoDB 的方向 我自己之前的很多项目都使用过它 而且处理起来很舒服 但最近我发现了HDF5 http en wikipedi
  • 下拉菜单 - jQuery/CSS

    我正在做的下拉菜单有问题 请检查此屏幕截图 http img215 imageshack us img215 8449 hovermenu png http img215 imageshack us img215 8449 hovermen
  • JBoss类加载问题

    我有一个在 tomcat 上完美运行的 Web 应用程序 war 文件 现在我需要让这个相同的应用程序在 JBoss 4 2 2 上运行 同一 JBoss 实例上运行着其他应用程序 问题是当我尝试在 JBoss 上部署 war 应用程序时
  • Java 中是否存在可变的 URL/URI 对象?

    我有一个字符串形式的 URL 我希望对其进行各种修改 具体来说 如果查询字符串中的值已存在 我需要修改它们 如果不存在 则创建它们 在我看来 应该已经有一个现有的类 我可以使用我的 URL 作为字符串来构造该类 该类会将 URL 拆分为其组
  • 在unix中使用sed反转四个字母的长度

    如何反转四个长度的字母sed 例如 the year was 1815 反向至 the raey was 5181 这是我的尝试 cat filename sed s a z a z 2 1 但它并没有按照我的预期工作 不确定是否可以在所有
  • Android-NDK-添加本机支持-NDK 位置在首选项中无效

    我正在尝试使用调试模式 调试为 Android 本机应用程序 控制台说我需要添加本机支持 但是 当我按照说明进行操作时 它显示如下图 我应该如何处理 NDK 位置在首选项中无效 任何意见将是有益的 我对此很陌生 谢谢 该示例是 NDK 示例
  • 为带有附件的电子邮件设置多部分

    从我的应用程序中 我发送带有附件的邮件 完整的代码在这里 public int sendMail MailDraft mailDraftInstance mailInstance path Send the mail String mail
  • 为什么.NET Core DI容器不注入ILogger?

    我正在尝试在基于 NET Core 2 1 的 C 控制台应用程序中登录并运行 我将以下代码添加到我的 DI 声明中 var sc new ServiceCollection sc AddLogging builder gt builder
  • GDB 在 macOS Catalina 上冻结

    我在 mac 上运行了 helloworld 来尝试 GDB 但在输入 run 后输出 New Thread 0x1903 of process 69034 然后就什么也没有了 我等了一个小时了 还是没有任何动静 完成认证并禁用startu
  • 使用 PDO 连接 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 刚刚开始使用 PDO 请解释我的连接
  • 如何使用 PHP 打印 JavaScript

    我需要将一些 JS 变量传递给 PHP 但遇到了一些麻烦 我已经尝试过以下方法 product id echo product id 但这只是将其打印为字符串 我将如何存储该 JS 变量然后echo它使用 PHP 吗 我对 PHP 很陌生
  • 不同数据的单独链接/关联表?

    哪种设计方法更好 为数据库中的每种数据类型建立单独的链接 关联表 还是将通用标识合并到公共链接 关联表中 因为如果没有例子这个问题真的没有意义 假设我有一个数据库 其中包含作者和书籍的数据 使用人们可以轻松掌握和识别的示例 为了简单起见 每