问题标签 [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.
sql - 如何为联结表创建外键
我有 Object1 和联结表和 Object2。Object2 是具有许多联结表的表,但只能有一个联结表来引用它。删除表 Object1 时,应删除联结表和 Object2。在这种情况下如何制作外键?但是当 Object2 被移除时,那么只有联结表应该被移除,而不是 Object1。我正在使用 SQL Server 2008。
asp.net - 与实体框架中的联结表的多对多关系?
根据以下帖子,我正在尝试在实体框架中创建多对多关系(代码优先):在 MVC 和实体框架中选择有限数量的数据库设计?
但是,我无法让它正常工作,而且我确信我正在以错误的方式做一些非常简单的事情。这是我的尝试中没有的图表:
联结表的要点是我需要在关系中有一个额外的属性 Level,所以我不能只使用顾问和程序之间的直接关系。我在设计器中手动添加了 ConsultantProgramLink 实体,然后分别添加到 Program 和 Consultant 的关联,选择为每个添加 FK,然后将它们设为主键。但是当我这样做时,它并没有像我预期的那样工作:
如果我在 Consultant 和 Program 之间进行了直接关联,我就可以在我的代码中引用例如 Consultant.Programs。但这现在不适用于连接表。有什么办法可以解决这个问题,还是我总是必须通过联结属性(Consultant.ConsultantProgramLink.Programs)?无论如何,即使我尝试通过 junction 属性也无济于事。我可以在我的代码中执行 Consultant.ConsultantProgramLink,但是另一个点并没有给我导航属性 Programs(由于某种原因,它也变成了简单的 Program,为什么?如果我最终可以访问它们,我可以重命名它们吗?) .
那么我做错了什么?为什么我不能通过代码中的点符号访问属性?
silverlight - 数据源中缺少实体框架 4 导航属性
我有包含 3 个表的数据库 - Actors、Films、Actors_Films。其中 2 个表具有多对多关系(Actors 和 Films),使用联结表(Actors_Films)建模。
我在 Silverlight 应用程序中使用 EF4。我创建了一个 EF 模型,edmx 设计器只显示了我的 Actors 和 Films 实体,但它们每个都有一个到另一个实体的导航属性(Actors 有一个 Films 的导航属性,而 Films 有一个 Actors 的导航属性) .
我添加了一个域服务,并构建了项目。以演员为例,我现在想添加一个视图,该视图包含一个数据表单,可以让我在演员之间循环,还有一个数据网格,可以显示当前所选演员出现的任何电影。但是,在数据源选项卡中,我有包含 2 个实体的域上下文 - 演员和电影。这两个实体只显示它们的实际列,导航属性没有出现:
演员 ---ActorID ---ActorName
电影 ---FilmID ---FilmTitle
它是否正确?我认为应该显示导航属性。
我的实际应用程序比这更复杂,但这是一个简化的示例,只是为了关注实际问题。
谢谢
米克
database-design - 连接表和归一化问题
我很难弄清楚以下设计模式是否可以接受。对于关系模型,我有以下要求(以及其他一些要求):
1) 它必须能够表示应用程序(例如AppA
、AppB
、AppC
),每个应用程序都有自己的一组属性。
2)每个应用程序都可以通过不同的渠道进行通信,例如Internet
(E-Mail、Twitter、Facebook)、Phone
(SMS、MMS 等),因此程序和渠道之间存在多对多的关系。
3)有一组预定义的标识符(地址、电话号码、登录帐户)可以被许多程序共享,因此,程序和标识符之间也是多对多的关系。
4)相同的标识符可以发送多种类型的消息,程序也可以(同样,多对多),但我需要能够在每个应用程序的基础上限制通信类型标识符的使用。
基本上,我所做的是创建四个表 , ,Program
并存储有关每个表的信息,而不是为 , 等创建连接表,这只会使设计复杂化,我创建了一个由主表组成的表这四个表的键具有唯一约束。现在,该表的每条记录都链接到给定的通信。Channel
Ident
CommunicationType
(Program, Channel)
(Program, Identifier)
(Program, Channel, Ident, CommunicationType)
当然,这以一种非常简单的方式解决了我的问题,但现在我在质疑自己,如果它违反了规范化原则,这是否完全可以接受。任何人都可以给我一个意见吗?
sql-server - 关联没有先前关系的表 (SQL Server)
编辑:我换掉了我的结构实现,但我的问题仍然是一样的;即在创建 SvcRequest 记录之前首先创建一个 Publication 对象(如果它尚不存在)。
我得到了一个必须“修复”的数据库,并且对某个特定问题感到非常困惑。为了简单起见,我们有两个已经存在的表(重要的)。我花了一段时间才弄清楚两者之间的关系,最终决定采用传统的连接表如下:
SvcRequest 和 SvcProgressLog 或多或少是同级表,它们都包含对父级的引用。这种奇怪的层次关系让我花了一段时间才弄清楚,现在我只需要一种方法来加入它们,这样就可以轻松地执行 CRUD 操作。
这里的过程如下:
- 一个出版物的服务请求进来了。
- 如果 Publication 存在 --> 更新相应的 Publication 记录。如果没有,请创建一个新的出版物。之后,根据从 Web 表单捕获的信息创建 SvcRequest 记录。(此处需要帮助)
- 最后,可以为存在但尚未记录的请求创建一个日志条目。
存在以下关系:
- 出版物 --> SvcRequest :: 1 --> 许多
- 出版物 --> SvcProgressLog :: 1 --> 许多
- SvcRequest --> SvcProgressLog :: 许多 --> 许多 (-ish)
一如既往,我非常感谢您的帮助和智慧之言;)よろしく
database - 复杂的数据库关系(联结表)
我的问题是关于将两个联结表合并为一个的想法,用于类似相关的表。请阅读以了解我的意思。另请注意,这确实是我面临的一个问题,因此与这个论坛有关。这只是一个具有广泛影响的话题,如果您愿意的话,我希望能引起各专业人士的更多参与,以获得更好的“最佳实践”普查。
我有这个相当具有挑战性的数据库设计问题。我希望这将是一个许多人可以贡献和学习的维基。为了使这更容易,我创建了一组图形,并将问题分解为 1) 过程和 2) 结构。
工艺步骤
- 提出了文档(出版物)的请求(DocRequest)。
- 如果所述出版物不存在,则创建新出版物。
- 运行日志 (StatusReport) 会保留以了解满足请求的进度。
注意:对于任何给定的出版物,可能有许多 DocRequests 和 StatusReports(包括更新)
数据库结构
注意:DocRequest 和 StatusReport 表都有许多字段和支持表,未在附图中显示。此外,特定的出版物是那些表中所有记录所属的主记录。
--当前实施--
注意:这种设计的主要缺陷是,每当您创建新的 DocRequest 和 StatusReport 记录时,您还必须在 Publications 表中创建一个新记录(其作用类似于联结表),但这也会创建一个新的 Publication结果。这不是期望的行为。
--典型实现--(对于这种类型的关系)
注意:这没问题,并且可能是理想的,但处理对 DocRequest 和 StatusReport 表的更新,独立地将它们链接到它们所属的出版物。
--我的首选实现--(对于这种特殊情况)
注意:我在这里的想法只是将双联结表合并为一个。在这种情况下,只要 DocRequest 或 StatusReport 发生插入,联结表就会获得一条新记录。我可能会用触发器来处理这个问题。
讨论
现在进行讨论。如果您认为这是一个坏主意,我想从我的数据库开发人员那里知道,以及由此可能产生的问题。我认为记录的净数量应该与两个单独的联结表相同,并且实际上通过节省额外的 ID 列来使用更少的空间。:)
让我知道你们的想法。我真的很想让很多人参与这个讨论。干杯! :)
sql - 三个表之间的连接表的优缺点,在任何给定时间只有两个表
我将在三个表之间建立多对多关系,但该关系一次只在一个表(比如 TableA)和另外两个表(比如 TableB 和 TableC)中的一个之间存在。也就是说,我可以有一个连接表
具有约束以确保 TableB_id 为空或 TableC_id 为空,或两个联结表
确定我应该使用这两种可能性中的哪一种的好标准是什么?
sql - 如何在关系数据库中存储和索引列表?
我正在构建一个数据库 (SQLite) 来存储有关我编写的 Mathematica 脚本每次运行的信息。该脚本需要几个输入参数,所以我的数据库有一个表,每个参数都有一个列(在其他列中)。
一些输入参数是数字列表。我存储这些的第一个想法是使用该问题的已接受答案中所述的联结表。但我通常对几个不同的运行使用相同的列表。如何查找任何给定列表是否已在数据库中,以便我可以重用其 ID 而不是再次存储它?
评论中提到的约束:
- 列表的长度没有明确的上限,但实际上它的范围从 1 到大约 50。
- 不同列表的数量将很少,大约为 10。
- 我实际上有 3 个列表参数。其中两个,列表中的值是非负的双精度浮点数;第三,这些值是成对的这样的数字。
- 没有重复的条目。(这些是更精确的集合,所以没有重复和顺序无关紧要)
- 我可以轻松地将列表元素排列为排序顺序。
例如:假设我的表是这样设置的
当我运行脚本时,它会设置参数,然后调用一个函数来运行计算,如下所示:
假设这是脚本的第一次运行,它会将以下内容插入数据库:
到现在为止还挺好。现在假设我用一个不同的参数再次运行脚本,
在一个简单的实现中,这将导致数据库包含以下内容:
但我希望它能够查找列表{.1, .3, .5}
已经在数据库中的事实,以便在第二次运行后数据库包含以下内容:
我可以使用哪种查询来查找表中{.1, .3, .5}
已存在该列表param2
?
我不反对在必要时创建额外的表格。或者,如果除了使用更有意义的连接表之外,还有其他模型,那也没关系。
sql-server - 实体框架的特定列上的多对多关系
我有 3 个表:书籍、部分和内容。我想在部分和内容之间添加多对多关系。Section 和 Content 表有一个 PageNo 列。一个页面可能有许多内容和许多部分。简单来说:
PageNo 对于 Section 和 Content 表都不是唯一的。所以我不能在 Sql Server 中为 PageNo 添加外键。
我试图创建一个这样的联结表:
我为这个连接表添加了 FK。因此实体框架可以理解联结表,并在 SectionId 和 ContentId 上建立多对多关系。但是每次当我需要插入 Section 或 Content Table 之一时,我也必须插入 SectionContent 连接表。所以首先我必须检查联结表中是否已经有相同的记录。项目中还有很多插入操作。我必须搜索所有插入操作,并且必须添加额外的查询以插入联结表。
我还需要获取页面中的部分和内容。这对我来说是额外的努力。
我可以删除 Section 和 Content 表之间的关系。而且我可以在 PageNo 列上使用额外的连接查询。但我想使用实体。我想以像 Section.Contents 这样的实体方式获取内容,并且我想以与 Content.Sections 相同的方式获取 Sections。
那么我可以在没有 SQL Server 的 FK 的情况下在 PageNo 列上添加 Section 和 Content 之间的多对多关联吗?
编辑:另外,如果我使用上面的联结表,我必须执行这样的 sql 查询,对吗?
nhibernate - 您如何在流利的 nhibernate 中映射和使用连接表?
我有两个表和一个联结表的经典场景。比方说,位置、价格和 LocationXPrices。
LocationXPrices 仅包含位置和价格的 id,以便我们知道它们之间的关系。
我们得出的最佳方法是这样的: - 将多对多的位置映射到价格 - 将多对多的价格映射到位置 - 没有特定的映射,也没有 LocationsXPrices 的 .NET 对象。
将在读取位置时创建交汇点。插入将与位置一起完成。
这是处理这种情况的最佳做法吗?谁能提供更好的解决方案?这对我来说并不那么自然。
谢谢你,摩苏。