问题标签 [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.

0 投票
1 回答
1829 浏览

sql - 帮助将 SQL 查询转换为关系代数

我在将一些查询转换为关系代数时遇到了一些困难。我有一本关于数据库设计的好书,这是关于关系代数的一章,但我似乎仍然无法创建正确的一章:

我最难解决的问题是:

我知道这个符号可能有点难以粘贴到 HTML 论坛中,但也许只是使用一些通用名称或希腊名称。

提前致谢

0 投票
0 回答
1962 浏览

c# - 有人可以从 C#/LINQ 的角度描述嵌套集模型吗?

我知道嵌套集模型与 C# 语言或 LINQ 不直接相关……这是我用来开发 Web 应用程序的。

对于分层数据(在我的例子中是带有子类别的类别),我目前正在使用类似于邻接列表模型的东西。目前,我只有 2 级类别,但我想更进一步,使用嵌套集模型允许 n 级类别。

我不太清楚如何在 C# 上下文中使用它。这是我正在阅读的关于嵌套集模型的文章。虽然这篇文章消除了我的一些困惑,但我仍然有一个很大的?? 在我脑海中:

- 插入、更新或删除类别是否繁琐?看起来左右数字需要重新编号......对于以下场景,LINQ 查询会是什么样子?

  • 删除一个子节点(重新编号所有节点的左/右值)
  • 删除一个父节点(你如何处理孤儿?)
  • 将子节点移动到不同的父节点(再次重新编号)

如果我的理解是正确的,那么子节点的左/右值总是在父节点的左/右值之间,对吗?

似乎很容易,如果只有类别是静态的……很可能我需要花更多的时间来理解这个概念。

任何帮助是极大的赞赏!

0 投票
3 回答
12479 浏览

mysql - 数据库 - 设计“事件”表

在阅读了这篇很棒的Nettuts+ 文章的提示后,我想出了一个表模式,它将高度易变的数据与其他遭受大量读取的表分开,同时减少了整个数据库模式中所需的表数量,但是我'不确定这是否是一个好主意,因为它不遵循规范化规则,我想听听你的建议,这是一般的想法:


我在类表继承结构中建模了四种类型的用户,在主“用户”表中,我存储所有用户共有的数据(id, username, password, 几个flags, ...)以及一些TIMESTAMP字段(date_created, date_updated, date_activated, date_lastLogin, . ..)。

引用上面提到的 Nettuts+ 文章中的提示 #16:

示例 2:您的表中有一个“last_login”字段。每次用户登录网站时它都会更新。但是对表的每次更新都会导致该表的查询缓存被刷新。您可以将该字段放入另一个表中,以尽量减少对用户表的更新。

现在它变得更加棘手,我需要跟踪一些用户统计信息,例如

  • 用户个人资料被查看的唯一次数
  • 来自特定类型用户的广告被点击的唯一次数
  • 特定类型用户的帖子被查看的唯一次数
  • 等等...

在我完全规范化的数据库中,这增加了大约 8 到 10 个额外的表,虽然不是很多,但如果可以的话,我想保持简单,所以我想出了以下“ events”表:

基本上是ID指表中的主键(id)字段TABLE,我相信其余的应该很简单。在这个设计中我喜欢的一件事是,我可以跟踪所有用户登录,而不仅仅是最后一个,从而用这些数据生成一些有趣的指标。

由于events表的不断增长的性质,我还考虑进行一些优化,例如:

  • #9:由于只有有限数量的表和有限(和预定)数量的事件,可以将TABLEandEVENTS列设置为ENUMs 而不是VARCHARs 以节省一些空间。
  • #14 :将 s 存储IPUNSIGNED INTsINET_ATON()不是VARCHARs。
  • 将 s存储DATETIMESTAMPs而不是DATETIMEs。
  • 使用ARCHIVE(CSV? ) 引擎代替InnoDB/ MyISAM
    • 仅支持INSERTs 和SELECTs,并且动态压缩数据。

总的来说,每个事件只会消耗 14 个(未压缩的)字节,我猜这对我的流量来说是可以的。

优点:

  • 能够存储更详细的数据(例如登录)。
  • 无需设计(和编写代码)几乎十几个附加表(日期和统计数据)。
  • 减少每个表的几列并保持易失性数据分离。

缺点:

  • 非关系型(仍然没有 EAV 差):
    • SELECT * FROM events WHERE id = 2 AND table = 'user' ORDER BY date DESC();
  • 每个事件的 6 字节开销(IDTABLEEVENT

我更倾向于采用这种方法,因为优点似乎远大于缺点,但我还是有点不情愿......我错过了什么吗?您对此有何看法?

谢谢!


@coolgeek:

我做的稍有不同的一件事是维护一个 entity_type 表,并在 object_type 列(在您的情况下为“TABLE”列)中使用其 ID。您可能希望对 event_type 表执行相同的操作。

为了清楚起见,您的意思是我应该添加一个附加表来映射表中允许的事件,并在事件表中使用该表的 PK 而不是TABLE/EVENT对?


@本:

这些都是从现有数据中得出的统计数据,不是吗?

附加表主要与统计信息有关,但我的数据尚不存在,一些示例:

如果我删除这些表,我将无法跟踪谁、什么或何时,不确定视图如何在这里提供帮助。

我同意它应该是分开的,但更多的是因为它是根本不同的数据。某人是什么和某人做了什么是两件不同的事情。我认为波动性并不那么重要。

我听说过这两种方式,但我在 MySQL 手册中找不到任何说明任何一种都是正确的。无论如何,我同意你的观点,因为它们代表了各种数据(具有比常规方法更具描述性的额外好处),它们应该是单独的表格。

我认为您可以说是只见树木不见森林。

您的表的谓词将是“从 IP IP 在时间 DATE EVENTed 到 TABLE 的用户 ID”,这似乎是合理的,但存在问题。

我所说的“不如 EAV 差”的意思是所有记录都遵循线性结构,而且它们很容易查询,没有层次结构,所以所有查询都可以用一个简单的SELECT.

关于你的第二个陈述,我认为你在这里理解错了;IP 地址不一定与用户相关联。表结构应如下所示:

IP 地址 ( ) 在日期 ( )对表 ( )的 PK ( IP) 做了一些事情 ( )。EVENTIDTABLEDATE

例如,在我上面示例的最后一行中,它应该显示 IP 217.0.0.1(某个管理员),在 2010-04-20 03:20:00 删除了用户 #2(其最后一个已知 IP 是 127.0.0.2) .

例如,您仍然可以将用户事件加入用户,但您不能实现外键约束。

确实,这是我最关心的问题。但是,我不完全确定这种设计会出现什么问题,而传统的关系设计不会出现问题。我可以发现一些警告,但只要与数据库混淆的应用程序知道它在做什么,我想应该不会有任何问题。

在这个论点中重要的另一件事是我将存储更多的事件,并且每个事件将比原始设计增加一倍以上,在ARCHIVE这里使用存储引擎非常有意义,唯一的事情是它没有支持FKs(既不支持UPDATEs也不支持DELETEs)。

0 投票
2 回答
140 浏览

mysql - 限制用户仅查看 rails 中的关联记录

我有一个应用程序,其中三个模型(Profile -> SubModel -> SubSubModel)链接在一起,有很多关系。我试图限制用户在登录后仅检索与其个人资料关联的记录。我对 Rails 很陌生,这是我在 Profile 模型中一直在尝试的

但这在使用 Profile.find_by_id(1).submodels 调用时返回一个空数据集,我还能如何实现我想要做的事情。或者我应该在控制器或视图中处理这个问题,我认为这听起来很适合模型处理这个问题。

0 投票
1 回答
70 浏览

php - 查询带或不带值的道具列表

我正在尝试SELECT在三个关系表上创建一个,如下所示:

在我的页面上,我想得到这样的结果,但我的查询有一些问题:

所以查询应该返回如下内容:

我想使用类似的东西:

问题是查询不返回NULL值,我需要相同的prop顺序来处理所有materials道具值NULL or not

我希望这个例子很清楚!

0 投票
2 回答
1283 浏览

c# - 如何将在其他表中有相关​​记录的 SQL 记录复制到同一个数据库?

我在 C# 中创建了一个函数,它允许我将记录及其相关子项复制到同一数据库中的新记录和新相关子项中。(这适用于允许将以前的作品用作新作品的模板的应用程序。)

无论如何,它工作得很好......这是它如何完成副本的描述:

它使用每条记录的当前主键填充基于内存的两列查找表。接下来,当它单独创建每个新副本记录时,它使用新记录的身份 PK [从 SCOPE_IDENTITY() 检索] 更新查找表。现在,当它复制任何相关的孩子时,它可以查找新的父 PK 以在新记录上设置 FK。

在测试中,只需一分钟就可以在 SQL Server 2005 Express Edition 的本地实例上复制关系结构。不幸的是,事实证明它的生产速度非常慢!我的用户正在通过 LAN 与我们的 SQL Server 处理每条父记录的 60,000 多条记录!虽然我的复制功能仍然有效,但这些记录中的每一个都代表一个单独的 SQL UPDATE 命令,它以大约 17% 的 CPU 从其正常的 2% 空闲加载 SQL Server。我刚刚完成了 50,000 条记录副本的测试,花了将近 20 分钟!

有没有办法在 SQL 查询或存储过程中复制此功能,以使 SQL 服务器完成所有复制工作,而不是从每个客户端通过 LAN 爆破它?

(我们运行的是 Microsoft SQL Server 2005 标准版。)

谢谢!

-德里克

0 投票
3 回答
134 浏览

php - 在 mysql db 中提交的最后结果

我将如何获得在 mysql 数据库行中提交的最后 20 个结果。

我需要 20 个最近用户提交的结果。

干杯。

0 投票
2 回答
1322 浏览

sql-server - 将网店存储迁移到 NoSQL 解决方案

如果您有一个基于 SQL Server 关系数据库的网店解决方案,那么迁移到 NoSQL 存储的原因是什么(如果有的话)?将严重依赖关系的数据存储迁移到 NoSQL 是否有意义?如果从头开始,您是否会为网店项目选择 NoSQL 解决方案而不是关系解决方案,一段时间后,这将再次以一堆表格结束,如文章、分类、TaxRates、价目表等,以及它们之间的关系大小?

.NET (4.0) 对 MongoDB 或 MongoDB 对 .NET 4.0 的支持是什么样的?我可以指望 MongoDB 的丰富代码生成工具,例如 EF 向导、L2SQL 向导等吗?

因为到目前为止我所读到的,NoSQL 最适合文档存储,更简单的对象模型。

您对这个问题的回答将帮助我做出正确的基础架构设计决策。

更新:如果我围绕 ASP.NET MVC 开发我的解决方案并严重依赖模型类,那么选择 DB4o 来简单地序列化和反序列化与数据存储区之间的对象是否是最简单的方法?

0 投票
1 回答
117 浏览

mysql - 索引“启用”字段好主意?

网站的内容存储在 MySQL 数据库中。99% 的内容将被启用,但一些(用户、帖子等)将被禁用。大多数查询以WHERE (...) AND enabled

在“启用”字段上创建索引是个好主意吗?

0 投票
4 回答
223 浏览

sql - 数据库设计——它尊重第三个 NF 吗?

我在关系模型中有以下关系(表)

我想知道学生和教师的功能依赖关系。

这些表是否尊重第三范式?哪些应该是这些表的主键?