问题标签 [foreign-keys]

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

sql - 多个外键?

我有一张表格,用来记录从一个供应商向另一个供应商运送产品的天数和成本。我们(出色地:p)将运输供应商(FedEx、UPS)和产品处理供应商(Think...Dunder Mifflin)存储在“供应商”表中。所以,我的 SHIPPING_DETAILS 表中有三列都引用了 VENDOR.no。出于某种原因,MySQL 不允许我将所有三个定义为外键。有任何想法吗?

编辑删除双主键定义...


是的,不幸的是,这并没有解决它。现在我得到:

无法创建表'./删除我的数据库名称/SHIPPING_GRID.frm'(错误号:150)

做一个 phpinfo() 告诉我这个mysql:

客户端 API 版本 5.0.45

是的,VENDOR.no 是 int(6) 类型。

0 投票
24 回答
41258 浏览

database - 数据库设计中真的需要外键吗?

据我所知,外键(FK)用于帮助程序员以正确的方式操作数据。假设程序员实际上已经以正确的方式这样做了,那么我们真的需要外键的概念吗?

外键还有其他用途吗?我在这里错过了什么吗?

0 投票
5 回答
270 浏览

database-design - 额外的表或非特定的外键?

系统中有几种类型的对象,每种对象在数据库中都有自己的表。用户应该能够对其中任何一个进行评论。您将如何设计评论表?我能想到几个选择:

  1. 一个评论表,每个对象类型(ObjectAID、ObjectBID 等)都有一个 FK 列
  2. 多个注释表,每个对象类型一个(ObjectAComments、ObjectBComments 等)
  3. 一个通用 FK (ParentObjectID) 与另一列指示类型 ("ObjectA")

你会选择哪个?有没有更好的方法我没有想到?

0 投票
15 回答
104626 浏览

sql-server - 何时/为什么在 SQL Server 中使用级联?

在 SQL Server 中设置外键时,在什么情况下应该在删除或更新时级联,其背后的原因是什么?

这可能也适用于其他数据库。

我最关注的是每种场景的具体示例,最好是来自成功使用它们的人。

0 投票
38 回答
118334 浏览

database - 外键有什么问题?

我记得在播客 014中听到Joel Spolsky提到他几乎没有使用过外键(如果我没记错的话)。但是,对我来说,它们对于避免整个数据库中的重复和后续数据完整性问题似乎非常重要。

人们是否有充分的理由说明原因(以避免根据堆栈溢出原则进行讨论)?

编辑: “我还没有理由创建外键,所以这可能是我实际设置外键的第一个原因。”

0 投票
7 回答
3628 浏览

sql - 从整数到 GUID 作为主键

我使用了几个带有整数主键的引用表。现在我想将整数更改为 GUID,使所有引用保持不变。最简单的方法是什么?

谢谢!

添加

我确实了解这个过程,所以我需要更详细的建议,例如,如何填写新的 GUID 列。使用默认值 newid() 是正确的,但是对于已经存在的行呢?

0 投票
17 回答
691791 浏览

sql-server - 如何使用 T-SQL 临时禁用外键约束?

SQL Server 是否支持禁用和启用外键约束?或者是我唯一的选择drop,然后重新create约束?

0 投票
2 回答
448 浏览

database - Firebird 1.5.3:如何将已连接用户的 FK 添加到数据库?

我使用 FB1.5.3,最终需要向数据库添加一些 FK。碰巧的是,如果我在其他人连接到数据库时尝试这样做,我会遇到异常。

有没有办法在系统运行时添加 FK?

0 投票
4 回答
852 浏览

php - 与关系有关的数据库设计问题

我正在对现有数据库进行升级,该数据库的设计没有任何代码来实现正在考虑的设计。现在我在用代码实现数据库设计方面遇到了障碍。我确定这是否是数据库设计的问题,或者我只是没有看到关于如何做的正确解决方案。

基本逻辑规定如下:

  1. 用户通过席位访问在线培训。用户可以拥有多个席位。
  2. 席位由公司购买,并与产品具有多对多关系。
  3. 产品与模块具有多对多关系。
  4. 模块与课程具有多对多关系。
  5. 课程是最终用户进行培训的访问权限。
  6. 为了搅浑水,出于某种原因,一些用户有多个包含相同产品的席位。
  7. 认证是基于每个产品进行的,而不是基于每个席位。
  8. 用户与存储其当前状态或课程分数的课程具有多对多关系。
  9. 用户在完成该产品的所有模块中的所有课程后,即可对产品进行认证。
  10. 了解用户何时完成特定模块的所有课程也很重要。
  11. 一些席位将用于重新认证,这意味着之前通过产品认证的用户可以注册并参加重新认证考试。
  12. 由于规则 11,用户可以并且将会拥有多个认证记录。
  13. 编辑:当用户完成课程(得分高于 80%)时,用户已(根据当前业务逻辑)完成了所有产品和包含课程的所有席位的课程。

正如我或多或少所描述的那样,我在当前设计和业务逻辑上一直遇到的问题是,我无法找到一种方法来有效地将用户是否已获得特定产品和席位的认证与他们何时获得认证没有。我一直在尝试确定哪些产品下的哪些座位已获得用户认证,哪些没有。部分问题是因为如果他们目前在不同席位下注册了多个相同产品,那么我只需要计算一次产品。

下面是所涉及的架构部分的副本。任何有关如何改进设计或在代码中绘制关联的建议将不胜感激。万一这很重要,这个网站是建立在 LAMPP 堆栈上的。

您可以在此处查看数据库架构的相关部分:http://lpsoftware.com/problem_db_structure.png

0 投票
1 回答
635 浏览

sql - SQL 2005 另一个基础之间的外键

是否可以在数据库表中为 SQL 2005 中另一个数据库中的表列创建外键?