使用继承来反 Postgres 中的反模式 (OTLT)

2024-02-01

我知道“一个真正的查找表”的概念是一种反模式,通常不应该使用(参考网上的许多文章)。但是,我想知道当您在 Postgres 中使用表继承时,情况是否仍然如此?

您永远不会读取或插入主查找表 - 它更多地充当其他查找表的模板,您不会失去任何引用完整性(可能您会获得空间,否则由于数量较大,这些空间会浪费在缓存块中)表中的数据),并且当您通过子表插入时,您甚至不需要类型。

我的 OTLT 将具有所有查找表所需的以下列:

CREATE TABLE sl_lookupmaster
(
  lookupid bigserial NOT NULL,
  parent bigint,
  tstamptdt timestamp without time zone NOT NULL DEFAULT localtimestamp,
  description character varying(500) NOT NULL,
  entityref bigint NOT NULL,
  deleted boolean NOT NULL DEFAULT false,
  CONSTRAINT sl_lookupmaster_pkey PRIMARY KEY (lookupid)
)

然后你继承它。

人们怎么想,这还是一个设计错误吗?这还是 OTLT 吗?


关于数据库设计有很多经验法则,很多人在捍卫这些法则时坚持到了“宗教战争”的地步,而没有真正理解这些规则背后的原则。有一个非常棒的线程here http://www.dbforums.com/database-concepts-design/1619660-otlt-eav-design-why-do-people-hate.html一个人只是在问whyOTLT有这么邪恶吗?那里有十几个人说:“天哪,这太糟糕了!”一个人最终给出了一些现实的缺点。

最重要的是,如果您的表相对静态,如果没有太多用户同时访问它们,如果您可以控制谁/什么/如何数据进入表以及从逻辑设计的角度来看如果您仍在对单独的查找表进行建模,那么您可能可以使用 OTLT 作为物理实现。

我已经设计数据库 25 年了,在我看来,只要您了解该决定的影响,您就应该随意打破规则。设计任何东西总是需要权衡。如果你睁大眼睛做出权衡,那么你做出的任何决定都应该是一个好的决定。

假设您对各种附带条件都满意,例如确保您的 OTLT 不会成为垃圾热点或垃圾沼泽,那么在我看来,您提议的物理实现似乎介于“好”和“优雅”之间。

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

使用继承来反 Postgres 中的反模式 (OTLT) 的相关文章

  • SQLite 性能基准 - 为什么 :memory: 这么慢...只有磁盘速度的 1.5 倍?

    为什么 sqlite 中的 memory 这么慢 我一直在尝试查看使用内存中的 sqlite 与基于磁盘的 sqlite 是否可以获得任何性能改进 基本上我想用启动时间和内存来换取非常快速的查询not在应用程序过程中击中磁盘 然而 以下基准
  • 播种方法是插入具有 NULL 值的附加实体

    我突然出现这种奇怪的行为 我在版本控制 tfs 中比较了我的文件 以确保我没有更改任何内容 也没有发现任何不同 我正在用一些元数据播种我的数据库 我发现它有一个我以前从未见过的非常奇怪的行为 我正在插入一个实体 产品 它会插入该实体2 ti
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • 数据库设计 - 何时拆分表?

    有时创建一个单独的表会产生更多工作 我是否应该将其拆分 例如 在我的项目中 我有一张客户表 每个客户对每种产品都有自己的特殊价格 只有5种产品 未来不会计划更多产品 每个客户也有一周中公司向他交付产品的独特日子 当日期和产品价格是客户表中的
  • 如何制作抗崩溃的ios应用程序

    我现在正在编写 ios 应用程序一段时间 但我的应用程序仍然经常崩溃 并且需要时间才能使它们变得非常稳定 我觉得这很烦人 那么 有没有关于防崩溃编程ios应用程序的编程模式呢 打开编译器警告 删除所有警告 运行静态分析器 删除所有警告 使用
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几
  • 在 MySQL 中对连续值进行分组并向这些组添加 id

    我有一个简单的表 我需要确定四行的组 这些组不是连续的 但每行的每一行的值都有 1 例如 language id C 16 C 17 Java 18 Python 19 HTML 65 JavaScript 66 PHP 67 Perl 6
  • 在cakephp 3中动态更改数据库连接

    我正在尝试更改中使用的数据库连接蛋糕php 3在飞行中 我找到的这个问题的每个答案都指的是蛋糕PHP 2 These https stackoverflow com questions 27655613 multiple databases
  • 如何调试 MySQL 存储过程?

    我当前的调试存储过程的过程非常简单 我创建一个名为 debug 的表 在存储过程运行时从其中插入变量值 这允许我查看脚本中给定点的任何变量的值 但是有没有更好的方法来调试 MySQL 存储过程 下列debug msg可以调用过程来简单地将调
  • 非关系数据库设计[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解您使用过的设计策略非关系型 nosql 数据库 也就是说 不使用传统关系设计或 SQL 的 大多数是新的 数据存储类 例如
  • 通过单击按钮将 Access 中的数据获取到 C# 中的文本框中

    我在 MS Access 中有一个表 其中包含 FoodID FoodName Price 在 C 中 我有三个文本框 txtId txtName txtPrice 和一个按钮 btnSearch 我的问题是 在 C 中 我只需在 txtI
  • 修订:算法和数据结构

    我需要通过修订来构建和处理数据的想法 例如 我有一个对象数据库 例如汽车 每个对象都有许多属性 这些属性可以是任意的 因此没有一个固定的模式来描述这些对象 这些对象可能保存为键值对 现在我需要更改对象的属性 我不想完全重写它 我希望能够返回
  • Hibernate 每个子类一个表继承策略的效率

    我正在考虑 Hibernate 管理的类层次结构的表布局 当然 每个子类表技术在我看来是一般意义上最合适的 然而 通过逻辑思考 我对其性能有些担忧 尤其是随着子类数量的扩展 举一个非常简短 且经典 的示例 假设您有以下类 public ab
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • Neo4j Desktop DB 无法启动,状态为“KILLED”

    运行 Neo4j Desktop 版本 1 0 15 尝试启动DB导致启动失败 数据库启动失败 DB database f8950fdd 6b5f 4fea 8c9f e8457ee1da9a v3 3 1 退出 状态为 已杀 检查日志 主
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid

随机推荐

  • 如何从 _layout SharePoint 页面使用网站母版页?

    我想在我的 SharePoint 12 hive template layouts TelephoneBookList test aspx 文件中使用母版页文件 如果有意义的话 就是网站的母版页文件 但是 每当我将 MasterPageFi
  • Mysql:每月记录数(包括零)

    我正在尝试计算表中的记录并按日期对它们进行分组 我当前的查询如下所示 SELECT count MONTH time as month YEAR time as year FROM myTable GROUP BY month year O
  • 使用 Swing 和 Graphics2D 在 Java 中旋转轮子?

    我正在研究一个可以绕中心旋转轮子的课程 轮子是使用graphics2d创建的 但我无法确切地弄清楚如何让轮子绕中心旋转 目前 轮子旋转 但不完全围绕原点旋转 我的最终目标是创建一个具有多种颜色的轮子以及围绕它的程序 但我主要关心的是让旋转轮
  • 我用的plyr对吗?我似乎使用了太多内存

    我有以下有点大的数据集 gt dim dset 1 422105 25 gt class dset 1 data frame gt 在不执行任何操作的情况下 R 进程似乎占用了大约 1GB 的 RAM 我正在尝试运行以下代码 dset lt
  • Jenkins job DSL 插件 - 隐藏参数

    我正在使用詹金斯隐藏参数插件 https wiki jenkins ci org display JENKINS Hidden Parameter Plugin但我找不到像使用其他参数那样在 DSL 中编写它的语法 例如 https jen
  • ImportError:使用 Jupyter Notebook 时没有名为 numpy 的模块 - Google Cloud Dataproc

    在 Google Dataproc 上启动 Jupyter Notebook 时 导入模块失败 我尝试使用不同的命令安装模块 一些例子 import os os sytem sudo apt get install python numpy
  • 使用 Python、文件

    我有一些需要读取的数据文件 我知道我应该使用 Dataset 但是有没有一种方法可以下载这些文件 而无需手动下载 而是通过其 URL 来下载 在我的例子中会是什么样子 我正在使用 conda python 和 netCDF4 无论我做什么
  • 如何在 Yii2 中进行多次 UPSERT?

    我正在使用 Yii2 高级模板 我必须在 MySql 数据库中插入 1000 到 2000 条记录 是否可以制作多个UPSERT 查询 in Yii2 请帮助我提供您的建议 答案 谢谢 从版本 2 0 14 开始 您可以使用 upsert
  • pandas:添加具有其他两列中任意一列的值的新列

    pd DataFrame A None 2 None None 3 4 B 1 2 3 4 5 6 A B 0 NaN 1 1 2 2 2 NaN 3 3 NaN 4 4 3 5 5 4 6 如何添加列C这将从列中获取值A如果不是 NaN
  • 如何将车辆品牌的 NCIC 代码值转换为 DCCIS 代码值?

    业务分析师告诉业务规则这已经改变了 现在他们希望我首先检查 计数 以查看是否有多个 NcicCode 在 VehicleMakeMapping 查找文档中 与 MncisCode 在输入文档中 匹配 如果 VehicleMakeMappin
  • Xcode 5.1 构建 opencv 在 64 位模拟器上失败

    我将 Xcode 更新到 5 1 使用 opencv 框架 2 4 的 iOS 应用程序项目中出现了许多错误 我的电脑是 macbook air 和 OSX 10 9 2 当我编译我的项目时 当我使用 Iphone Retina 3 5 英
  • ssis中动态表创建和加载数据

    我对 ssis 有一点疑问 文本文件具有基于位置的位置数据 需要在 sql server 中动态创建表并使用 ssis 包加载相关位置数据 源文本文件具有如下所示的示例数据 编号 名称 地点 1 abc 海德 2 巴努 陈 3 杰 邦 4
  • 正则表达式在页面上查找单词,包括内部标签

    谢谢切坦 萨斯特里 https stackoverflow com users 31284 chetan sastry我有这个正则表达式代码来解析我的页面以获取单词列表并将 TM 添加到其中 var wordList jQuery UI j
  • 如果大于批处理文件

    我编写了一个简单的批处理文件来根据数字选择运行常用网站 这是我的代码 我正在尝试设置它 以便如果有人输入 6 或更大的数字 它将转到 N但每当我输入 6 时 批处理文件就会退出 我努力了if input gt 6 goto N但它只是告诉我
  • WordPress Rest api响应发送html内容类型问题,URL中带有正斜杠

    从我的自定义 WordPress Rest api 中 我需要将以下文本作为内容类型 html 返回 OK ImageSendURL www yourdomain xxx Plugin DownloadOrders 这是我返回相同内容的代码
  • 如何使用加特林将 scala 类导入到另一个类中?

    注意 我是加特林新手 对 Scala 几乎一无所知 我正在开始将负载测试从 Jmeter 转换为加特林 我被困在如何组织代码库上 我找到的所有示例都是单个文件示例 如何将代码从一个模拟类导入到另一个模拟类中 我现在有这个类和测试场景 pac
  • HttpRouteBuilder - 它去了哪里以及为什么?

    我将 Web API 2 的 nuget 包从 RC1 升级到了 5 0 0 然后傻眼地发现原来可以访问的 HttpRouteBuilder 变成了内部的 除此之外 不再有以 HttpRouteBuilder 作为参数的 HttpConfi
  • 如何将 XML“行”加载到列表框 C# 的索引中

    我正在尝试将 xml 的单个 行 加载到列表框索引中
  • seaborn distplot / 具有多个分布的 displot

    我正在使用seaborn 绘制分布图 我想用不同的颜色在同一个图上绘制多个分布 以下是我开始绘制分布图的方法 import numpy as np import pandas as pd from sklearn datasets impo
  • 使用继承来反 Postgres 中的反模式 (OTLT)

    我知道 一个真正的查找表 的概念是一种反模式 通常不应该使用 参考网上的许多文章 但是 我想知道当您在 Postgres 中使用表继承时 情况是否仍然如此 您永远不会读取或插入主查找表 它更多地充当其他查找表的模板 您不会失去任何引用完整性