问题标签 [database-relations]

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

database - 数据库设计中的冲突需求,具有两个相似功能的领域

好的,所以我现在正在为“Box Items”制作一张表格。

现在,一个盒子项目,取决于它的用途/项目的状态,最终可能与“运输”盒子或“退货”盒子相关。

Box Item 可能有缺陷:如果是,则会在 Box Item 的行中设置一个标志 (IsDefective),并且 Box Item 将被放入“Returns”框中(与其他物品一起退回给该供应商)。否则,Box Item 最终将被放入“Shipping”盒子(与其他要运送的物品一起)。(请注意,运输和退货箱有自己的表格:所有箱子都没有一个公用表格......尽管如果可能的话,我应该考虑这样做作为第三种可能性?)

也许我今天只是想不清楚,但我开始质疑在这种情况下应该怎么做。

我的直觉告诉我,我应该为每个可能的关系设置一个单独的字段,即使在任何给定时间只能发生其中一个关系,这将使 Box Items 的架构看起来像:

BoxItemID 描述 IsDefective ShippingBoxID ReturnBoxID 等...

这将使关系变得清晰,但似乎很浪费(因为任何时候都只会使用其中一个关系)。所以我想我可以只有一个 BoxID 字段,并根据 IsDefective 字段确定它指的是哪个 BoxID(运输或退货箱 ID):

BoxItemID 描述 IsDefective BoxID 等...

这似乎不那么浪费,但不适合我。关系不明显。

所以,我把它交给你,Stackoverflow 的数据库专家。在这个情况下,你会怎么做?

编辑:谢谢大家的意见!它给了我很多思考。一方面,下次我开始这样的项目时,我将使用 ORM。=)两个,因为我现在不在,我会咬四个字节并使用两个字段。

再次感谢大家!

0 投票
2 回答
550 浏览

sql-server - 如何在 SQL Server 和 NHibernate 之间组合级联更新/删除?

我正在编写一个带有手工制作的域模型(类)和手工制作的数据模型(表/关系)的应用程序,并让 NHibernate 负责映射。

最好是告诉数据库执行级联更新或删除还是告诉 NHibernate 这样做(cascade="all-delete-orphan")?可以同时设置它们吗?

0 投票
2 回答
1240 浏览

orm - 实现关系代数的语言特性

我一直在尝试在 Scala 中编码一个关系代数(据我所知,它是最先进的类型系统之一),但似乎没有找到一种方法来达到我想要的位置。

由于我对编程语言设计的学术领域没有那么丰富的经验,所以我真的不知道要寻找什么功能。

那么,实现静态验证的关系代数需要哪些语言特性,哪些语言具有这些特性呢?

一些要求: 元组是一个函数,将名称从一组静态定义的元组有效名称映射到名称指定类型的值。让我们将此名称类型称为设置域。

关系是一组具有相同域的元组,因此任何元组的范围在集合中都是唯一的

到目前为止,模型可以很容易地在 Scala 中建模

Tuple 中的 vals、vars 和 defs 是上面定义的名称类型集。但是元组中不应该有两个同名的定义。vars 和 impure defs 也应该受到限制。

现在是棘手的部分:

两个关系的连接是一种关系,其中元组的域是来自操作数元组的域的并集。这样只保留它们域的交集具有相同范围的元组。

应该做的伎俩。

关系的投影是一个关系,其中元组的域是操作数元组域的子集。

这是我不确定是否有可能找到解决方案的地方。你怎么看?定义项目需要哪些语言特性?

上面暗示的是 API 必须是可用的。层层叠叠的样板是不可接受的。

0 投票
2 回答
206 浏览

c# - 何时使用 LINQ2SQL 加载相关表中的记录

假设我有两张桌子:

  • 报告
  • 评论

并假设我有一个数据库上下文:

如何确保每个报告的所有评论都已加载?

此时我想断开与数据库的连接,但仍然可以访问评论。(例如:)

0 投票
6 回答
2126 浏览

sql - 与地址簿表设计有关的 SQL 数据库问题

我现在正在为我的软件编写地址簿模块。到目前为止,我已经设置了数据库,它支持非常灵活的地址簿配置。

我可以为我想要的每种类型创建 n 个条目。类型在这里表示“电子邮件”、“地址”、“电话”等数据。

我有一个名为“contact_profiles”的表。

这只有两列:

然后有一个名为contact_attributes 的表。这个有点复杂:

我现在可以链接到这些配置文件,例如从我的用户表中。但是从这里我遇到了问题。

目前,我必须为要检索的每个值创建一个 JOIN。是否有可能以某种方式创建一个视图,它给我一个以类型为列的结果?

所以现在我会得到类似的东西

但是得到这样的结果会很好:

我最初不想创建这样的表格布局的原因是,可能总是要添加一些东西,我希望能够拥有多个相同类型的属性。

那么你知道是否有可能动态转换它?

如果您需要更好的描述,请告诉我。

0 投票
8 回答
17211 浏览

database-design - 何时使用数据库表之间的一对一关系?

一个数据库设计问题:您何时决定使用 1 对 1 关系表?

我看到的其中一个地方是,例如,当您有一个 User 和 UserProfile 表时,人们将它们拆分,而不是将所有列都放在 User 表中。

从技术上讲,您可以将所有列放在一个表中,因为它们的关系是一对一的。

我知道有人说对于 UserProfile 表,随着时间的推移,您需要更改表以添加更多列,但我真的不认为这是拆分表的充分理由。

那么,如果我要设计一个 User 表和 UserProfile 表,对我来说只在一个表中做会更好吗?

0 投票
2 回答
868 浏览

ms-access - 数据库中的顺序编号 (MSACCESS)

概括:

我有一个表,它有一个唯一的主键来标识每条记录。我还有另外三个可以识别记录的字段:

  • 类别
  • 类别编号
  • 重复号码

当我添加新记录并选择类别时,如何让 CategoryNumber 根据它是否重复正确递增。

请注意,这是一张大桌子。这仅仅是从 excel 到 access 的升级。

tldr:

昨天我问了如何处理Access中的多个键。可能是我没有问对问题,因为我的问题今天更加令人费解。

这是我正在尝试做的事情以及我陷入困境的地方。

我正在创建一个数据库来跟踪我用不同相机拍摄的各种不同胶片和格式的胶片照片(每张照片总共有 18 条不同的独立信息),这些照片可以追溯到近 15 年。几年前,我将数据保存在 MS Excel 中,并对输入表单进行了编程,以完成我将要解释的事情。

我想以两种方式跟踪照片。第一个是主照片编号,它可以让我知道我的文件中有多少张照片。这是一个序列号,我从未打算删除该序列中的某些内容。这将是一个唯一标识每张照片的数字。我将其视为整个数据库的主键。

但我也想根据一般的组或类别来归档幻灯片、底片和透明胶片,以便在需要提交照片或寻找特定内容时可以快速提取它们。所以我还添加了一个类别标识符(例如,风景也附加了一个“LS”名称或日落为“SS”等)。我还想为每个类别中的每张幻灯片保留一个连续的序列号。因此,例如,我的数据库中的第一张照片有 PhotoID = 3、Category = LS 和 CategoryID = 1。再往下我有 PhotoID = 14、Category = LS 和 CategoryID = 2。

现在除了这些,我还有另一个需要跟踪的数字,那就是如果我对同一场景进行了重复曝光。为此,我只是为每张照片添加了一个 DuplicateNumber。如果它没有重复,则 DuplicatNumber 为 0,如果它有一个重复,则 DuplicateNumber 为 1、2 个重复、DuplicateNumber 为 2,依此类推。

所以我有两种方法可以在我的文件中找到任何照片。通过在数据库中连续但不在我的物理文件中的 PhotoID,或者通过 Category、CategoryID 和 DuplicateNumber 的组合,这是我物理归档照片的方式。

现在在 Excel 中,当我打开表单时,我首先必须通过表单上的单选按钮选择将照片放入的类别。然后我会填写照片的所有相关数据。当我执行表单时,它会在主表中找到最后一个数字,将其递增并将所有数据添加到新记录中。然后它将激活我选择的类别的类别表,确定该表中的最后一个数字,增加它并在那里添加新数据。

一个重要的注意事项是,除非我将其设为 1、2 等,否则默认情况下 DuplicateNumber 始终为 0。它从未被计算过,但我输入了它。

当我创建幻灯片标签(“报告”)时,我会以这种格式(1LS1.0、14LS45.0、15LS45.1)包含主要的 PhotoID、CategoryName、CategoryID 和 DuplicateNumber,以及拍摄的位置和日期。

但现在我不想再使用 Excel 并尝试将数据库迁移到 MS Access。所以我有一个名为 PhotoDetails 的主表。

PhotoID 是此表中的主键。它有一个 PhotoCategory 字段,该字段是一个与另一个名为 Category 的表相关的数字。它的主键是 PhotoCategoryID,也是 PhotoDetails 中的外键。PhotoCategoryID 是一个标识每个类别的数字。在我所有类别的列表中,LS 排在第 11 位。但这就是我卡住的地方。

我在 PhotoDetal 表中有 CategoryNumber,它是标识每个类别中照片的编号,以及 DuplicateNumber,标识重复的数量。我想不通的是,当我添加新照片时,如何增加 CategoryNumber?我现在拥有的表格允许我输入所有数据,当我单击输入下一个时,它会自动调整 PhotoID 键,但是 CategoryNumber 呢?我不记得每个类别的最后一个数字是什么,以便我自己输入那个数字。除非我通过将所有数据存储两次来模仿我在 Excel 中所做的事情,一次是在 PhotoDetails(又名 Excel 中的 Master Sheet)中,另一次是在多个类别表中。我希望 Access 可以为我提供一种解决方法。

目前,我拥有的关系是与 PhotoDetails 以 1-M 关系链接的类别表。我还有几个其他表都以 1-M 关系链接(例如,表 Film 存储我使用过的不同电影,而 1-M 关系让我可以将什么电影链接到每张幻灯片,并且大多数其他数据都存储在其中方法)。

我有 31 个不同的类别。每张照片都有一个类别和一个类别 ID 编号,以及一个重复编号。我将选择数据输入中的类别和 DuplicateNumber,但我希望 CategoryID 编号和 PhotoID 自动递增。进行此操作的正确方法是什么,我只需要保留一个 PhotoDetail 表,该表不会像我在 Excel 中那样为每个类别重复。

0 投票
3 回答
8778 浏览

xsd - 在 XSD 模式中实现外键类型关系

我正试图围绕 xml 模式进行思考,而我试图弄清楚的一件事是如何在元素上引用另一个的关系类型模式,可能完全在另一个模式中。我查看了 xsd:key 和 xsd:keyref ,这似乎是我感兴趣的东西,但我不确定。最初我只是设置类型为 xs:ID abd xs:IDREF 的属性,据我所知,这显然不一定指特定元素。

基本上,我有几个不同的 xml 文件,其中元素引用同一文件或其他文件中的其他元素。它看起来很像一个关系数据库,我很想使用一个,但要求是只使用 XML 文件,所以我至少试图建立一些理智,而不是仅仅依靠 xml 注释来定义看似随机的字符串关系。它适用于较小的项目,但它肯定不可扩展。

有什么想法吗?

0 投票
9 回答
510 浏览

sql - 为什么位置查询不好?

我正在阅读 CJ Date 的SQL and Relational Theory: How to Write Accurate SQL Code,他认为位置查询是不好的——例如,这个INSERT

相反,您应该使用这样的基于属性的查询:

现在,我了解到第一个查询与关系模型不符,因为元组(行)是无序的属性集(列)。我无法理解第一个查询中的危害在哪里。谁可以给我解释一下这个?

0 投票
3 回答
136 浏览

php - MySQL连接,如何以“正确的方式”输出关系

首先,请原谅我糟糕的主题标题。我根本不知道如何制定这个问题或谷歌之后的内容,所以如果这很容易回答,请不要开枪。

假设我有以下表格:

[作者] ID,姓名

[新闻] id, item, author_id

如果我想显示一条新闻并输出相应的作者(存储在 author_id 中),我会执行以下查询:

然后通过做这样的事情输出它

在这里,$obj->name 将包含作者的姓名并成功输出。

那么,如果将“name”字段改为“item”会发生什么?显然会有一些冲突。以我以前在 Propel 和 symfony 方面的经验,我会做这样的事情:getAuthorId()->getName() - 但是对于这个项目,我需要从头开始编写 SQL。