动态数据库模式[关闭]

2023-11-22

为动态逻辑数据库模式提供存储的推荐架构是什么?

澄清一下:如果系统需要为模型提供存储,而模型的模式在生产中可能会被用户扩展或更改,那么有哪些好的技术、数据库模型或存储引擎可以实现这一点?

几种可能的说明:

  • 通过动态生成的 DML 创建/更改数据库对象
  • 创建具有大量稀疏物理列的表并仅使用“覆盖”逻辑模式所需的列
  • 创建一个“长而窄”的表,将动态列值存储为行,然后需要旋转这些行以创建一个包含特定实体的所有值的“短而宽”的行集
  • 使用 BigTable/SimpleDB PropertyBag 类型系统

任何基于现实世界经验的答案将不胜感激


你所提出的建议并不新鲜。很多人都尝试过……大多数人发现他们追求“无限”的灵活性,但最终得到的却比这少得多。这是数据库设计中的“蟑螂汽车旅馆”——数据进入,但几乎不可能将其取出。尝试并概念化为任何类型的约束编写代码,您就会明白我的意思。

最终结果通常是一个更难以调试、维护并且充满数据一致性问题的系统。这不是always情况确实如此,但更多的时候,事情就是这样结束的。主要是因为程序员没有看到这列火车失事的到来,并且未能针对它进行防御性编码。而且,通常最终会出现这样的情况:“无限”的灵活性实际上并不是那么必要;当开发团队收到一个规范说“天哪,我不知道他们要在这里放什么样的数据,所以让他们放任何东西”时,这是一种非常糟糕的“气味”......而最终用户却很好拥有他们可以使用的预定义属性类型(编写通用电话号码,并让他们创建其中的任何号码 - 这在一个良好规范化的系统中是微不足道的,并且保持灵活性和完整性!)

如果您有一个非常优秀的开发团队并且密切意识到通过这种设计,您必须克服的问题中,您可以成功地编写出一个设计良好、没有严重错误的系统。大多数时候。

但为什么一开始就面临如此不利的局面呢?

不相信我?谷歌“一个真正的查找表”或“单表设计”。一些好的结果:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056

http://thedailywtf.com/Comments/Tom_Kyte_on_The_Ultimate_Extensibility.aspx?pg=3

http://www.dbazine.com/ofinterest/oi-articles/celko22

http://thedailywtf.com/Comments/The_Inner-Platform_Effect.aspx?pg=2

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

动态数据库模式[关闭] 的相关文章

  • 如何在sqlite中创建物化视图?

    我对物化视图和 SQLite 进行了无数次搜索 据我所知 2004 年和 2006 年似乎有人提到 SQLite 没有物化视图 紧随其后的是 SQLite 的变更日志2008年3月 http www sqlite org releaselo
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 使用Powershell访问远程Oracle数据库

    我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
  • 如何跟踪用户在 X 天内每天访问该网站?

    Stack Overflow 上有一个新徽章 这 woot https stackoverflow com badges 71 woot enthusiast 徽章将授予连续 30 天内每天访问该网站的用户 如何实现这样的功能 如何以最简单
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • SQL Server 用分隔符分割字符串

    我有一个输入字符串 100 2 3 101 2 1 103 2 3 我想解析它并将其添加到具有 3 列的表中 因此它应该是 f x col1 col2 col3 100 2 3 类似的其他数据以逗号分隔作为记录和 作为列 Thanks ni
  • 如何使用PostGIS将多边形数据转换为线段

    我在 PostgreSQL PostGIS 中有一个多边形数据表 现在我需要将此多边形数据转换为其相应的线段 谁能告诉我如何使用 PostGIS 查询进行转换 提前致谢 一般来说 将多边形转换为线可能并不简单 因为没有一对一的映射 http
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 如何在列上创建外键,该列的每条记录都可能引用多个表之一中的列?

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

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679

随机推荐

  • htaccess 设置单个文件的 mimetype

    在 htaccess 文件中 可以为给定的扩展名设置 mimetype 例如 AddType application javascript js 如何为单个文件而不是扩展名设置 mimetype 我有一个 Javascript 需要与同一文
  • PHP中获取调用网页的URL

    我正在为一个班级开发网站统计引擎 这个想法是 您可以简单地在网页中嵌入一些代码 该代码将在每个页面加载时调用统计网站 然后统计网站将跟踪您的点击率等等 没有什么突破性的 我想做的是能够按网页细分网站点击量 例如 一个人可以在每个页面上包含相
  • 如何在 Docker 上运行 Spark?

    无法在 Docker 上运行 Apache Spark 当我尝试从驱动程序与 Spark Master 进行通信时 我收到下一个错误 15 04 03 13 08 28 警告 TaskSchedulerImpl 初始作业尚未接受 任何资源
  • Windows 服务安装程序不读取 App.Config 文件

    我已经在我的项目中添加了 App Config 我有一个安装程序类 ProjectInstaller cs 它需要从 App config 读取值 我正在提供钥匙 以下是示例代码 ConfigurationManager AppSettin
  • Android 谷歌地图片段

    我正在开发一个应用程序 顶部有一个菜单 菜单内有一些按钮 我正在尝试将谷歌地图添加到其中一个按钮 但我不是很成功 我正在关注本教程但不是直接实施谷歌地图MainActivity我将它们添加到按下按钮时启动的片段中 一切都很好 当我按下按钮时
  • 通过 pyspark.ml.tuning.TrainValidationSplit 调整后如何获得最佳参数?

    我正在尝试调整 Spark PySpark 的超参数ALS模型由TrainValidationSplit 它运行良好 但我想知道哪种超参数组合是最好的 评估后如何获得最佳参数 from pyspark ml recommendation i
  • PHP 的 mysql_real_escape_string() 的 Java 等效项

    Java 是否有相当于 PHP 的 mysql real escape string 这是为了在将 SQL 注入尝试传递给 Statement execute 之前逃避它们 我知道我可以使用PreparedStatement代替 但我们假设
  • 将不同长度的向量保存在矩阵/数据框中

    我有一个称为区域的长度为 166860 的数字 它由 412 个不同的元素组成 大部分长度为 405 一些长度为 809 我有它们的开始和结束 id 我的目标是提取它们并将它们放入具有 412 列的矩阵 数据框中 现在 我正在尝试这段代码
  • 文件的拖放是如何完成的?

    如在winamp或vlc播放器中 如何拖放文件 我的意思是我想知道什么样的编码进入应用程序 我想知道 c 在 Windows 上的纯 C C 中 开始阅读有关拖动接受文件函数和WM DROPFILES信息 如果您使用更强大的 C 库 Qt
  • 在 perl 中匹配字符串数组进行搜索的最简单方法?

    我想要做的是根据我的搜索字符串检查字符串数组并获取相应的密钥 以便我可以存储它 有没有一种神奇的方法可以用 Perl 来做到这一点 或者我注定要使用循环 如果是这样 最有效的方法是什么 我对 Perl 比较陌生 我只编写了另外 2 个脚本
  • .NET 中的窗口句柄可以改变它的值吗?

    在 NET 进程的生命周期中 System Windows Forms Form 假设使用的主要形式Application Run form 实际上改变它的值 即如果在不同的进程中使用句柄的值 例如IntPtr handle User32
  • 在 Django 模型中表示工作日的多选字段

    我一直在寻找一种优雅的方式来在 Django 模型中表示多选工作日字段 周一 周二 周三 我最初考虑使用按位数学来处理整数字段 但我不确定这是否是正确的方法 这将是一个最常被阅读的领域 我希望 Queryset 方法类似于Entry obj
  • 如何在Android中从网络加载React Native JS包?

    对于我的 Android 应用程序 我需要能够在运行时动态更新捆绑包 并使用资产中预先保存的捆绑包作为后备 我在官方文档 在 iOS 版本的 React Native 中 有一个方法可以让你指定一个 URL 来加载 JS 包 但我还没有看到
  • Cordova + Angularjs + 设备就绪

    我正在使用 Cordova 和 AngularJS 开发移动应用程序 如何在 Cordova 设备准备就绪之前限制 AngluarJS 的引导 基本上我不想在设备准备好之前使用任何 AngularJS 控制器 手动引导您的 Angular
  • 如何排除调试代码

    假设我有一个简单的记录器 void main var logger new MyLogger logger log hello Dart 我希望这段代码在开发模式 虚拟机检查模式 下运行 但我不希望它出现在我的生产代码中 我希望它能被 da
  • 3NF 和 BCNF 的简单区别(必须能够向 8 岁的孩子解释)

    我读过这句话 数据取决于密钥 1NF 整个密钥 2NF 仅取决于密钥 3NF 但是 我无法理解 3 5NF 或 BCNF 因为它被称为 这是我的理解 BCNF比3NF更严格 表中任何 FD 的左侧必须是超级键 或至少是候选键 那么为什么有些
  • openpyxl - 调整列宽大小

    我有以下脚本 它将 CSV 文件转换为 XLSX 文件 但我的列大小非常窄 每次我都必须用鼠标拖动它们来读取数据 有谁知道如何设置列宽openpyxl 这是我正在使用的代码 usr bin python2 6 import csv from
  • PopupWindow $BadTokenException:无法添加窗口 - 令牌 null 无效

    显示 PopupWindow 时出现以下错误 错误由以下行触发 checkInPopup showAtLocation ViewGroup mapView getParent Gravity CENTER HORIZONTAL 0 0 ma
  • 如何在 Clojure 中创建随机数的惰性序列

    如何创建随机数的惰性序列 我当前的代码 import java util Random def r new Random defn rnd nextInt r 10 defn random numbers max iterate nextI
  • 动态数据库模式[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 为动态逻辑数据库模式提供存储的推荐架构是什么 澄清一下 如果系统需要为模型提供存储 而模型的模式在生产中可能会被用户扩展或更改 那么有哪些好的技术 数据库模型或存储引擎可以实现这一点 几种