数据库设计 - 两个项目应该共享同一个表吗?

2024-02-21

背景:
同时设计的两个项目(A&B)都需要一个新表(称为DocumentStore) 在 postgres 下存储文档/文件。

但是项目 A 和 B 之间围绕文档存储的业务逻辑是不同的,这意味着围绕文档存储的关系DocumentStoreA 和 B 之间不同。

让我们更具体一点,请参阅下面的示例:

文档存储表结构看起来相同,没有约束/外键:

Table DocumentStore

DocUUID //unique Id for this document, PK, FK to other table depends on project 
fileName //file name
fileType //file type
FileContent //store file as blog

项目中A, DocumentStore.DocUUID参考Email.EmailUUID:

请注意,通过 FK,电子邮件 -> DocumentStore 之间存在一对多关系。

Table Email

EmailUUID //PK
subject
title
...

项目中B, DocumentStore.DocUUID参考Letter.LetterUUID:

请注意,Letter -> DocumentStore 之间通过 FK 存在一对多关系。

Table Letter

LetterUUID //PK
UserId
rightId
...

Email and Letter由于业务逻辑的不同,两者完全不同。


我的问题是:

  1. 我应该分享这个吗DocumentStore项目 A 和 B 之间的表 ?

  2. 如果1.的答案是肯定的,那么如何呢?通过postgres下的继承?

  3. 如果1.的答案是否定的,我是否应该创建两个具有相同结构但不同表名和不同外键的表?项目 A 和项目 B 各一份?


这些 fk 约束中只有一个对表的同一实例的每一列起作用。您必须为每个 fk 添加一列。或者有两个documentstore tables.

正如您所澄清的,同一行documentstore属于一封信或一封电子邮件,但仅属于single其中之一,而每封信/电子邮件可以有多个文档。
因此,我的新建议是:坚持现有的表格设计,但创建两个单独的桌子。将它们放在同一张表中没有任何好处。两个表共享相同结构的事实是没有充分的理由共享数据。

You can have schema_a.documentstore and schema_b.documentstore继承自master.documentstore。如果您有同时处理两个表中所有行的用例,那么这将非常有用。请务必阅读有关的章节Postgres 中继承的限制 http://www.postgresql.org/docs/current/interactive/ddl-inherit.html#DDL-INHERIT-CAVEATS。特别是,它不允许您定义单个 fk 约束:

继承功能的一个严重限制是索引 (包括唯一约束)和外键约束仅适用 到单个表,而不是它们的继承子项。这是正确的 外键约束的引用端和被引用端。

相关答案及代码示例:
根据表值找出哪个架构 https://stackoverflow.com/questions/12902072/find-out-which-schema-based-on-table-values/12902441#12902441
在PostgreSQL中创建两种类型的表 https://stackoverflow.com/questions/21565183/create-a-table-of-two-types-in-postgresql/21565888#21565888

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

数据库设计 - 两个项目应该共享同一个表吗? 的相关文章

  • 我可以通过在 Android Activity 中声明适当的成员“静态”来提高效率吗

    如果一个 Activity 在实践中是单例 我认为我可以通过声明适当的成员 静态 来获得一些效率 且风险为零 是的 The Android 文档说 http developer android com guide topics fundam
  • Java中单例的其他方式[重复]

    这个问题在这里已经有答案了 只是我在考虑编写单例类的其他方法 那么这个类是否被认为是单例类呢 public class MyClass static Myclass myclass static myclass new MyClass pr
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac
  • 使用 Ruby aws-sdk 跟踪文件到 S3 的上传进度

    首先 我知道SO中有很多与此类似的问题 在过去的一周里 我读了大部分 如果不是全部 但我仍然无法让这项工作为我工作 我正在开发一个 Ruby on Rails 应用程序 允许用户将 mp3 文件上传到 Amazon S3 上传本身工作正常
  • 如何在连接到 Heroku PostgreSQL 的 Flask 应用程序上处理更多并发用户?

    Heroku 上的 Flask API 有许多端点 它们在将 json 化结果返回给客户端之前在我的 Heroku PostgreSQL 数据库上运行查询 我当前的计划是 Hobby Basic 层 因此数据库最多只能处理 20 个连接 如
  • Matplotlib loglog 的错误刻度/标签(双轴)

    我正在使用 matplotlib 创建对数图 如下图所示 默认刻度选择得很糟糕 充其量是这样 右边的 y 轴甚至根本没有 在线性等效中确实如此 而两个 x 轴都只有一个 有没有办法获得合理数量的带有标签的刻度 without为每个情节手动指
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文
  • 如何为命令 stdout 添加 [stdout] 和 [stderr] 前缀?

    使用命令结构 https doc rust lang org std process struct Command html 如何向 stdout 和 stderr 缓冲区添加前缀 我希望输出看起来像这样 stdout things are
  • 将客户端库添加到 Razor 类库

    我正在学习 Blazor 我注意到创建 Razor 类库是一个很好的做法 您将在其中定义大部分组件 这样您就可以在客户端或服务器中使用它们 而不会出现太多问题 在不同的框架中 我习惯于以 SASS 形式包含库作为引导程序 这样我就可以在我的
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ
  • 在DialogFragment中,onCreate应该做什么?

    我目前正在摆弄 DialogFragment 以学习使用它 我假设相比onCreateView onCreate 可以这样做 public void onCreate Bundle savedInstanceState super onCr
  • 如何禁用 solr 管理页面

    对于生产来说 拥有一个甚至不要求登录凭据的 solr 管理员感觉不安全 如何禁用默认的 solr 管理页面 我只是希望我的 web 应用程序使用 Solr 进行搜索词索引 我强烈建议保留管理页面用于调试目的 它在很多情况下拯救了我 有多种方
  • 进程被杀死后不会调用 onActivityResult

    我有一个主要活动 Main 和另一个活动 Sub 由 Main 调用 startActivityForResult new Intent this SubActivity class 25 当我在 Sub 时 我终止该进程 使用任务管理器或
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle
  • 描述符“join”需要“unicode”对象,但收到“str”

    代码改编自here http wiki geany org howtos convert camelcase from foo bar to Foo Bar def lower case underscore to camel case s
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典
  • 为什么 try catch 块没有捕获 Promise 异常?

    我对承诺的错误处理感到困惑 答案可能很明显 但我不明白 我有以下示例代码 var test async function throw new Error Just another error try test then catch err
  • 通过 Telnet 运行应用程序

    我需要创建一个 BAT 文件来通过 telnet 运行应用程序 但据我所知 在 DOS 上无法执行此操作 Telnet 不允许在连接的瞬间向远程计算机发送任何命令 并且 BAT 文件中的每个后续命令只有在 telnet 停止后才会执行 这段
  • R data.table 1.9.2 关于 setkey 的问题

    这似乎是 1 8 10 后引入的一个错误 与包含列表的 DT 的 setkey 相关 运行下面两个代码来查看问题 library data table dtl lt list dtl 1 lt data table scenario 1 p

随机推荐