我如何设计一个数据库,用户可以在其中定义 M-D 关系中的详细表的字段和类型?

2023-12-21

我的应用程序有一个名为“events”的表,每个事件在“eventdata”表中都有大约 30 个标准字段,而且还有可以是任何名称或类型的用户定义字段。用户可以通过指定 x 个字段(文本/双精度/日期时间/布尔值)以及这些字段的名称来定义这些事件数据表。对于每个“事件”,此“事件数据”(表)可以不同。

我当前的方法是为定义创建一个查找表。因此,如果我需要查询每个记录的所有“事件”和“事件数据”,我会使用两个查询在 M-D 关系中执行此操作(即从事件中选择 *,然后对于“事件”中的每个记录,从“某个表”中选择 *) )。

有更好的方法来做到这一点吗?到目前为止,我已经实现了这一点,但我的大多数查询需要对数据库进行两次不同的调用 - 我不能简单地将我的主“事件”表与“事件”中的每条记录的不同“事件数据”表连接起来。

我想我的主要问题是:我可以将主表与每条记录的不同详细表连接起来吗?

E.g.

SELECT E.*, E.Tablename 
FROM events E 
LEFT JOIN 'E.tablename' T ON E._ID = T.ID

如果没有,考虑到我不知道可能有多少用户定义字段以及它们的类型,是否有更好的方法来设计我的数据库。


有四种方法可以处理这个问题。

  1. 添加几个名为“Custom1”、“Custom2”、“Custom3”等的附加字段。这些字段的数据类型应为 varchar(?) 或类似的数据类型

  2. 添加一个字段来保存非结构化数据(如 XML 列)。

  3. 创建与某种类型的模板关联的名称/值对表。让他们管理模板。您必须使用数据透视表或类似的工具来获取数据。

  4. 使用像这样的数据库MongoDB http://www.mongodb.org/或其他NoSql http://en.wikipedia.org/wiki/NoSQL风格产品来存储这个。

上面说,第一个优点是速度快,但将自定义字段的数量限制为您定义的数量。较旧的主机类型应用程序以这种方式工作。 SalesForce CRM 曾经使用过。

第二个选项意味着每条记录都可以有自己的自定义字段。然而,根据您的数据库,这里存在一定的挑战。试过这个,不推荐。

第三种通常更难编码,但具有极大的灵活性。 SalesForce 和其他应用程序已经走了这条路;包括我负责的一对夫妇。缺点是微软显然已经获得了这种方式的专利,并且正在申请中。起诉几家公司 http://www.theregister.co.uk/2010/05/19/microsoft_salesforce_patent_litigation/超过它。就我个人而言,我认为这是废话。但是无所谓。要点是,使用风险自负。

第四个选项很有趣。我们已经使用了它一点,性能非常好,而编码非常简单。这可能是非结构化数据的最佳选择。

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

我如何设计一个数据库,用户可以在其中定义 M-D 关系中的详细表的字段和类型? 的相关文章

  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • IIF(...) 不是公认的内置函数

    我正在尝试在 Microsoft SQL Server 2008 R2 中使用它 SET SomeVar SomeOtherVar IIF SomeBool value when true value when false 但我收到一个错误
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We
  • 计算2个日期之间每个日期的记录数

    我必须创建一个查询来返回多轴图表的结果 我需要计算为 2 个日期之间的每个日期创建的 ID 数量 我试过这个 DECLARE StartDate datetime2 7 11 1 2020 EndDate datetime2 7 2 22
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • 如何使用 MySQL 选择有特定值的 2 个连续行?

    我正在构建一个系统 该系统应该显示学生何时连续缺席两天 例如 此表包含缺勤情况 day id missed 2016 10 6 1 true 2016 10 6 2 true 2016 10 6 3 false 2016 10 7 1 tr
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • 默认情况下在sql日期时间列中插入null/空值

    如何在 SQL Server 中创建一个表 默认日期时间为空 而不是1900 01 01 00 00 00 000我得到了 我的意思是 如果没有插入值 则默认值应该为 null 空等 如果没有插入值 默认值应该是null empty 在表定
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join

随机推荐

  • .NET MAUI 页面变得可见后处理事件

    我有一个ContentPage在显示数据之前需要进行一些 繁重的工作 所以 我的想法是有一个ActivityIndicator在数据准备好显示之前页面上可见 我正在尝试找出一个合适的event用于此目的 我无法使用Appearing事件发生
  • lock语句如何确保处理器内同步?

    我有一个同时执行两个线程的小型测试应用程序 1 增加 astatic long value 另一个则递减它 我已经保证ProcessThread ProcessorAffinity线程与不同的物理 无 HT 核心关联以强制处理器内通信 并且
  • 如何向 Facet_Grid 条带标签添加希腊字母?

    我使用创建了下面的图facet grid并使用过labeller参数将 p 和 mu 2 标签添加到网格周围的灰色条带 我想用带有下标 2 的希腊字母 mu 替换我用红色矩形表示的 mu 2 标签 如果有人可以帮助我 我将不胜感激 如果需要
  • 为什么在 Linux 内核中忙于循环时,进程会被长时间剥夺 CPU 资源?

    乍一看 我的问题可能看起来有点微不足道 请耐心阅读并完整阅读 我在我的 Linux 内核模块中发现了一个繁忙的循环 因此 其他进程 例如 sshd 在很长一段时间内 例如 20 秒 无法获得 CPU 时间 这是可以理解的 因为我的机器只有一
  • 如何按给定索引处的项目过滤元组列表并将其转换为列表字典

    我有一个如下所示的列表 Lista amazon Amazon 1 0 amazon Alexa 0 8 amazon microsoft 0 6 amazon Amazon Pay 0 7 amazon Prime 0 4 alien j
  • Node.js:process.env 与全局有何不同?

    如何设置环境变量process env thing 42与创建全局变量不同global thing 42 什么时候更愿意process env thing over global 这两个对象的优点 缺点是什么 global是全局对象 pro
  • 颤动错误:类型“_Smi”不是类型“double”的子类型

    我使用 flutter 1 0 开发了一个应用程序 该应用程序在大多数 Android 和 iOS 手机上运行良好 但我发现有一部Android手机和一部iPhone无法打开该应用程序 只显示错误消息 类型 Smi 不是类型 double
  • 车把,加载外部模板文件

    我的目标是将所有 Handlebars 模板放在一个文件夹中 如下所示 templates products hbs templates comments hbs 我通过粗略的 Google 搜索在几个地方找到了这个片段 它显然会加载到外部
  • 忽略 Mercurial 中文件的未来更改,但仍然跟踪它[重复]

    这个问题在这里已经有答案了 可能的重复 Mercurial 如何忽略对跟踪文件的更改 https stackoverflow com questions 2856571 mercurial how to ignore changes to
  • IE 在打印时删除网页的颜色

    你好 我有一个网站 其背景颜色在打印时很重要 但 IE 会删除页面中的所有颜色 我知道有一些设置可以在 IE 上禁用此选项 但我不能依赖用户进入 IE 设置来禁用 IE 上的此选项 有什么方法可以从我的网页或其他方式禁用此功能吗 提前致谢
  • 在javascript中显示明天的名字?

    我试图在我们的电子商务网站上输出类似于以下内容的内容 Order by 5pm today for dispatch on Monday 显然 星期一 一词将被第二天的名称取代 最好是下一个工作日 即不是星期六或星期日 我有以下简单的 ja
  • Promise 函数延迟状态变量

    如何立即正确地存储 Promise 函数的值 我正在尝试使用 useEffect 挂钩 但我的状态仍然延迟 这是有问题的 因为如果用户正在验证他的购物车 则可能会应用错误的税 useEffect gt SalesTax getSalesTa
  • JavaScript。 Math.sqrt 将 NaN 赋予正数?

    我目前有一个脚本 可以从文本区域获取数字并用它们进行各种计算 我的标准差函数遇到问题 因为即使它的类型是数字 并且它是正数 56 它也不会输出该值 当我运行这段代码时 var variance findVariance array vari
  • Java 类中的 Grails @Autowire 不起作用

    我有一些 Java 代码 我想将它们转换为 Bean 可以通过依赖注入在 Grails 控制器和服务中使用 代码是基于这个here https spring io guides gs accessing data neo4j 作为独立的 J
  • 在 GridView 组件中显示多个图像时 Android 应用程序崩溃

    我对这个网站相当陌生 我来这里是因为我在其他地方找不到这个答案 所以我想看看是否可以获得一些帮助 我的项目中有一个 GridView 以及一个图像适配器 我需要以下代码的帮助 package com humanoid sigma impor
  • 在 Swift 中使用 @discardableResult 进行闭包

    斯威夫特 3 有介绍 https github com apple swift evolution blob master proposals 0047 nonvoid warn md the discardableResult函数的注释可
  • 如何在 SvelteKit 应用程序启动时执行代码

    我正在开发一个基于 SvelteKit 的应用程序 在服务器启动时 无论是在开发服务器启动 Node js 适配器启动时 我想执行一些诊断命令 此类操作的一个示例是对后端服务器执行 ping 操作 如果后端无法访问 则会提前失败 这主要是服
  • 如何获取已加载的 JNI 库的列表?

    正如主题所说 Java 中有没有一种方法可以获取在任何给定时间加载的所有 JNI 本机库的列表 免责声明 请注意 这个解决方案总是很hackish 现在在大多数情况下将不再起作用 查看本杰明的回答 https stackoverflow c
  • 使用 Java SDK、连接模式访问 Azure 服务总线

    有几个使用 C 配置服务总线环境以使用 http https 的示例 使用以下调用 ServiceBusEnvironment SystemConnectivity Mode ConnectivityMode Http 我的问题是 可以以及
  • 我如何设计一个数据库,用户可以在其中定义 M-D 关系中的详细表的字段和类型?

    我的应用程序有一个名为 events 的表 每个事件在 eventdata 表中都有大约 30 个标准字段 而且还有可以是任何名称或类型的用户定义字段 用户可以通过指定 x 个字段 文本 双精度 日期时间 布尔值 以及这些字段的名称来定义这