问题标签 [junction-table]

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 投票
6 回答
8202 浏览

many-to-many - 联结表(join table)也可以用于一对多关系吗?

根据定义,Junction Table(桥表/链接表)用于多对多关系,使用时如下:

但是它不能也像在这个例子中一样容易地用于一对多关系,在这个例子中,一个用户与许多订单相关联:

(我不太了解数据库,所以如果我误解了什么,请纠正我。)

0 投票
8 回答
12224 浏览

ruby-on-rails - 为什么在连接表上有一个主键不好?

我正在观看一个截屏视频,作者说在连接表上有一个主键不好,但没有解释原因。

示例中的连接表在 Rails 迁移中定义了两列,作者为每一列添加了索引,但没有主键。

为什么在这个例子中有一个主键不好?

编辑:正如我向 Cletus 提到的,我可以理解自动编号字段作为主键的潜在用途,即使对于连接表也是如此。但是在我上面列出的示例中,作者明确避免在“create table”语句中使用语法“:id => false”创建自动编号字段。通常,Rails 会自动将自动编号 id 字段添加到像这样在迁移中创建的表中,这将成为主键。但是对于这个join table,作者特意阻止了。我不确定他为什么决定采用这种方法。

0 投票
5 回答
9882 浏览

ruby-on-rails - 在连接表中,Rails 缺少组合键的最佳解决方法是什么?

我有一个连接表(如上),其中包含引用相应类别表和帖子表的列。我想对categories_posts连接表中的复合键 category_id、post_id强制执行唯一约束。但是 Rails 不支持这一点(我相信)。

为了避免在我的数据中出现具有相同 category_id 和 post_id 组合的重复行的可能性,对于Rails 中缺少复合键的最佳解决方法是什么?

我的假设是:

  1. 在这种情况下,默认的自动编号列 (id:integer) 不会保护我的数据。
  2. ActiveScaffold 可能会提供一个解决方案,但我不确定仅仅为了这个单一功能将它包含在我的项目中是否有点矫枉过正,特别是如果有更优雅的答案。
0 投票
3 回答
1084 浏览

linq - 优化 LINQ 查询所需的帮助

我正在寻找优化我的 LINQ 查询,因为虽然它工作正常,但它生成的 SQL 是复杂且低效的......

基本上,我希望选择订购所需产品 (reqdProdId) 并使用信用卡号注册的客户(作为 CustomerDisplay 对象)(使用外键 CustId 存储为 RegisteredCustomer 表中的一行)

总而言之,客户有一个相应的人,该人具有名称;PersonID 是 Customer 表中的外键。如果我查看生成的 SQL,我会看到从 Person 表中选择了所有列。仅供参考,DisplayName 是使用 Customer.FirstName 和 LastName 的扩展方法。有什么想法可以限制来自 Person 的列吗?

其次,我想摆脱 Any 子句(并使用子查询)来选择具有所需 ProductID 的所有其他 CustomerId,因为它(可以理解)生成 Exists 子句。您可能知道,LINQ 有一个与联结表有关的已知问题,所以我不能只做一个 cust.CustomerProducts.Products。如何选择联结表中具有所需 ProductID 的所有客户?

任何帮助/建议表示赞赏。

0 投票
6 回答
132049 浏览

database - 如何从 SQLite 表中检索最后一个自动递增的 ID?

我有一个带有列 ID(主键、自动增量)和内容(文本)的消息表。
我有一个包含用户名(主键、文本)和哈希列的用户表。
一条消息由一个发件人(用户)发送给多个收件人(用户),而一个收件人(用户)可以拥有多条消息。
我创建了一个包含两列的 Messages_Recipients 表:MessageID(指的是 Messages 表的 ID 列和 Recipient(指的是 Users 表中的用户名列)。该表表示收件人和消息之间的多对多关系。

所以,我的问题是这个。新消息的 ID 将在存储到数据库后创建。但是,为了检索这个新的 MessageID,我如何保存对刚刚添加的 MessageRow 的引用?
当然,我总是可以在数据库中搜索添加的最后一行,但这可能会在多线程环境中返回不同的行?

编辑:据我了解,对于 SQLite,您可以使用SELECT last_insert_rowid(). 但是我如何从 ADO.Net 调用这个语句呢?

我的持久性代码(消息和消息接收者是数据表):

0 投票
2 回答
1978 浏览

mysql - Zend_db 联结表连接查询

不知道为什么我无法弄清楚这一点。基本上,我有两个具有多对多关系的表,所以我在它们之间有一个连接表。

例如,考虑以下数据库模式:

所以,很多餐厅可以有很多菜系。

我尝试构建的查询将返回郊区存在的所有美食。一个 SQL 示例如下:

这对我来说似乎很有意义。

我如何使用 Zend_Db 来实现它?

0 投票
3 回答
205 浏览

sql - 这个数据库结构是否健全、正确和规范化?

所以,昨天我问了两个围绕同一个想法的问题:重组一个 A- 没有标准化的数据库,B- 由于我的无知而一团糟。我花了一天的大部分时间来整理我的想法,阅读并完成一些测试。今天,我认为我对我的数据库的外观和行为有了更好的了解,但我想确保我理解正确的 SQL 数据库设计和规范化过程的核心思想。

最初,我有一个名为“Files”的表,其中包含有关文件的数据(它的 URL、上传日期、上传文件的用户 ID 等)以及一个名为“grades”的列,表示您可能使用该文件的年级水平为了。(仅供参考:这些文件是学校的课程计划)我意识到我违反了关于规范化的规则 #1 - 我将我的“成绩”存储为“1,2”或“2,6”或“3,5,6” “在一栏中。如果我想查看 JUST 3 年级课程或 JUST 5 年级课程,这在尝试解析这些数据时会引起很大的麻烦。

向我提出的建议,后来变得明显的是,我有 3 张桌子:

文件(有关文件、网址等的数据)等级(可用年级表。可能从 1-6 开始) files_grades(连接表)

这是有道理的,。我只是想确保在我做之前我明白我在做什么。假设用户 A 上传了文件 xyz,并认为它适合 2 年级和 3 年级。

我会将一条记录写入“文件”表,其中包含有关该文件的数据(kb 大小、url、描述、名称、主键 files_id)。假设它的 id 为 345。

由于等级选项的数量有限,等级可能与他们的 ID 相同(即,等级 1 是 Grades_id 1,等级 2 是 Grades_id 2)

然后我将两条记录写入“files_grade”连接表,其中包含

files_grade_id、files_id 和 Grades_id 即

1,345,2

1,345,3

代表 files_id 345 适合的 2 个等级。然后我挥动我的魔法 SELECT 和 JOIN 魔杖并提取我需要的数据。

这有意义吗?我是否再次误解了关系多对多数据库的正确结构?

我刚刚想到的问题 2:所以,一堂课可以有多个“成绩”。没问题,我们刚刚解决了这个问题(我希望!)。但从理论上讲,它也可以有多个“学校”——小学、中学、高中。如果文件条目的中、高等级为 1,2,我们该怎么办?这可以很容易地通过说“每个文件一个学校,用户!”来解决,但我喜欢把它扔在那里。

0 投票
4 回答
3458 浏览

sql - 连接表的主键/聚集键

假设我们有一个 Product 表、一个 Order 表和一个(联结表)ProductOrder。

ProductOrder 将有一个 ProductID 和一个 OrderID。
在我们的大多数系统中,这些表还有一个称为 ID 的自动编号列。

放置主键(以及聚集键)的最佳做法是什么?

  • 我是否应该保留 ID 字段的主键并为外键对(ProductID 和 OrderID)创建非聚集索引

  • 或者我应该把外键对(ProductID和OrderID)的主键放在ID列上(如果有必要的话)

  • 或者......(你们中的一个人的聪明评论:))

0 投票
2 回答
765 浏览

ms-access - MS-Access 连接表在两个互斥列表之间插入/删除(2 个列表框)

有了这种设计,我想创建一个功能来添加和删除联结表中的记录。

案例来自于编辑员工并选择他们可以参加的考试。左侧列表框中将是他们没有资格参加的考试(无论如何)以及他们在右侧列表框中有资格参加的考试。

表是这样的:

EmpID始终已知,但ExamID将从左侧列表框中选择。右侧列表框中的记录可能必须同时具有 theEmpID和 theExamID才能被删除。

一旦它们进入各自的框,就不需要立即删除/插入(它们可以等到表单关闭)。

在 Access 中是否有一个好的/标准的方法来完成这个?

0 投票
1 回答
906 浏览

tsql - T-SQL 中的联结表

在我的数据库应用程序中,当我尝试将页面附加到站点时,我收到以下错误:

我打算通过使用联结表将一个页面添加到多个站点。

下面是有问题的三个表 (T-SQL) 的架构。任何建议将被认真考虑!