问题标签 [relational]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 跟踪数据库中修改的元组的最佳方法是什么?
我目前正在从事一个项目,在该项目中我必须跟踪关系数据库中修改的元组。这应该包括更新的元组,但也包括插入和删除的元组。我的问题是实现这一目标的最佳方法是什么?我有几个自己的想法,但也许有一些我没有想到的更简单/更好的方法,或者已经存在一个可以做到这一点的项目。
该项目的最终目标是适用于不同供应商的关系数据库,但第一个实现将使用 MySQL 数据库。以后可以支持其他数据库系统。但是,如果适用于 MySQL 的解决方案可以轻松地适应另一个数据库,那就太好了。
我的第一个想法是解析日志文件。但是,我不确定这些日志文件是否包含实际修改的元组,而且我可以想象这些日志文件并不总是可用(例如在共享主机上)。
我的第二个想法是在应用程序级别拦截查询。当执行 INSERT、DELETE 或 UPDATE 查询时,可以解析这些查询,并且可以预先确定它们将影响的元组。对于 INSERT 操作,这只是插入的元组,对于 DELETE 或 UPDATE 操作,可以通过在新的 SELECT 语句中应用 WHERE 子句来识别元组。
最后,我想补充一点,在这个开发阶段,性能并不是一个重要因素。
如果需要更多详细信息,我很乐意提供。
mysql - 如何构建关系数据库?数据
我需要跟踪得分以及得分的对象。以前,我使用一个看起来像这样的平面文件数据库(那是一团糟)来做到这一点:
每个团队都有一行和一列,我猜整个事情变成了一个图表。现在我也可以这样做,MySQL 也是如此,但它会变得臃肿,并且会迫使每一行有一个荒谬的列数。
我觉得我必须错过一些其他更简单的方法来做到这一点。有人可以帮忙吗?
c# - 高度可扩展项目的设计问题 - 牢记最佳实践
开发环境是 C# 3.5,带有 SQL Server 2008 数据库和实体框架。
想象一下,您有一个名为 Sign 的类和一个表,它表示由您的软件需要控制的第三方创建的物理电子标志。您还有一个名为 SignDriver 的类,它负责与标志进行实际通信。标志的属性/列表示标志驱动程序正确与标志对话所需的可配置信息。
一切都很好,你已经非常彻底地拍了拍自己的背。然后需要与不同的星座交谈。但是,此标志的工作方式与前一个不同,需要您的 Sign 类和表来存储其他信息。假设需要存储 5 个新事物(列/属性),但不幸的是,第一种类型的符号不需要这 5 个事物。然后您会发现,当您要控制每种类型的 10 个符号时,您的表中有许多 NULL 值。
您的域模型会不断增长,直到您拥有更多像 Sign 这样的类,每个类都代表问题域的不同部分,并且每个类都在数据库中具有相应的表。每个班级都面临着收集其类型的共同信息的相同问题,但根本不能很好地满足每种类型的专业化。
你意识到你的问题的性质意味着将有更多类型的迹象需要控制,以及更多类型的其他实体需要迎合。您需要一个更可扩展的模型。
对于这样的系统,最好的前进方式是什么?
我已经与我的同事详细讨论了这个问题,并且真的很想知道解决此类问题的最佳方法是什么。特别是因为这似乎是许多人过去会面临的问题。
以下是我们提出的选项以及每个选项的一些要点:
- 为每个实体创建n个“类型”类和表,以与其共享 1 对 1 关系。
- 非常继承-y。
- 扩展时最耗时。
- 很多表。
- 为每个实体创建一个“扩展属性”表来保存键值对。
- 参照完整性。
- 可扩展。
- 创建一个全局“扩展属性”表来存储任何实体的属性。(架构:entityType、entityId、key、value、dataType)
- 超级可扩展。
- 不能与现有表具有参照完整性。
- 看起来实体框架不能很好地处理这个问题。
你会做什么,为什么?
非常感谢任何帮助。干杯。
php - 使用 Doctrine ORM DQL (NOT IN) 排除行
我正在使用 codeigniter 和教义构建一个聊天应用程序。
表:
- 用户
- User_roles
- User_available
关系:
一个用户有很多角色。一个 user_available 有一个用户。
可供聊天的用户将在 user_available 表中。
问题:
我需要让 user_available 中没有 role_id 7 的所有用户。
所以我需要在 DQL 中表达类似的东西(这甚至不是 SQL,只是用文字):
SELECT * from user_available WHERE NOT user_available.User.Role.role_id = 7
真的卡在了这个
编辑:我猜我不清楚。这些表已经映射,Doctrine 为我完成了 INNER JOIN 工作。我正在使用此代码来获取等待时间最长的管理员,但现在我需要用户:
现在我需要让等待时间最长的用户,但这不起作用
sql - 在两列上使用 COUNT 和 GROUP BY 的 SQL 查询非常慢
我正在归档这个网络论坛,它通常每周会被清除一次。所以我在屏幕上抓取它,并将它存储到我的数据库(PostgreSQL)中。
我还对数据进行了一些分析,提供了一些供用户欣赏的图表,例如一天中什么时间论坛最活跃等等。
所以我有一个帖子表,如下所示:
我现在想为我的前 10 名小海报表中的每个用户计算帖子数。
我想出了这个:
事实证明这很慢。9 秒,此时帖子表中只有大约 300 000 行。
如果我只在一个列上分组,它只需要半秒钟,但我需要两者。
我对关系数据库和 SQL 比较陌生,所以我不太确定这是否正确,或者我做错了什么?
sql - 在 SQL 中插入两个方向相关的 2 行
我有两张表有点像这样:
每个表都相互关联:
通过他们的外键。
问题是,如果不删除一个外键约束、插入行,然后重新添加约束(这很蹩脚),就不可能创建第一个人/员工。
这里明显的上帝悖论是第一个“员工”并不是为了创造自己(“人”)而存在的。
有没有办法同时将数据插入两个表?这个 created-is-the-creator 场景只需要发生一次。如果我不能同时将数据插入两个表中,您的天才们还有其他方法建议吗?
澄清
还有其他表与“Persons”表相关……例如“Students”和“Guardians”。一个人不能切换类型(员工不能切换到学生或监护人,反之亦然)。这个悖论类似于具有 ManagerID FK 的 Employee 表。除了在我的情况下,表格已经分开。
解决方案 感谢 Remus Rusanu 和 b0fh
mysql - mysql查询正常关系表vs连接关系表
我对两个表之间的关系有疑问。
假设我们有一个表用户和链接。
现在链接这两者的正常方法是使用 name_links 表。例如:
现在我想知道制作这样的桌子是否是个好主意
我能想到的优点和缺点是:
优点1:
您将始终搜索索引,更快的查询示例选择 where uid=1,然后选择链接 1,3。两者都是索引,因此加载速度很快。
如果您有 1000 个用户,并且他们每个人都有 20 个链接,这意味着您必须通过 20.000 条记录才能获得所有链接(我认为,不确定这一点)。使用这种方法,你只需要一个索引就可以了。
缺点1:
您将不得不更频繁地更新 name_links 表,读取、编辑和写入示例用户 2 删除链接 2 方法将是:
+ 获取用户 1
的字符串 + 从字符串中删除数字
+ 插入新字符串这里的一切都是在索引上完成的,所以我认为它会很快。
缺点2:
另一个缺点是当您删除链接 2 时,您必须遍历所有字符串,但可以说这不是什么大问题,因为这种情况不会经常发生。
到目前为止,这是我能想到的,而我正处于我的项目的关键点,我必须决定选择哪一个。
我很想就选择哪种方法提供一些建议。我有我的优点和缺点吗?有没有我没有考虑的事情。对此主题的任何帮助将不胜感激。
谢谢你们!
c# - EF 在 1-M 关系中提取参考主键
在 1-M 关系中,在关系的许多方面,我可以提取父项的 Id,而无需使用以下内容进行其他查询:
但是我想知道是否有类似的方法可以从 1 中提取许多 ID 而无需进行其他查询?
干杯安东尼
php - 在 CodeIgniter 中处理关系数据的最佳方法?
在创建 CodeIgniter 项目时,处理模型之间关系的最佳方式是什么?模型是否应该包含与它们相关的其他模型,是否应该在控制器中处理,或者是否有其他方法来处理这些场景?我正在考虑一对一、一对多或多对多的关系。
示例:假设我有一篇博客文章,其中有一个带标签的多对多和带评论的一对多。在获取博客文章时获取标签和评论的最佳实践是什么?
tuples - 我如何用关系代数、域关系演算和元组关系演算找到最高/最大的东西
这是家庭作业的一部分。我有几个问题要问找到最高薪水或第二高薪员工的开斋节。找到获得最多飞机认证的飞行员。我不知道该怎么做。本章中没有任何示例,而且 google 证明没有那么有用。如果有人能告诉我如何做其中之一,那将有很大帮助。
以下是表格:
飞机(援助:整数,名称:字符串,巡航范围:整数)
认证(eid:整数,援助:整数)
员工(eid:整数,ename:字符串,薪水:int)