gpt4 book ai didi

sql - 如何在两个表之间共享相同的主键?

转载 作者:行者123 更新时间:2023-12-02 01:42:15 25 4
gpt4 key购买 nike

我正在读一本关于 EF4 的书我遇到了这个问题情况:

enter image description here

所以我想知道如何创建这个数据库,以便我可以按照书中的示例进行操作。

如何使用简单的 TSQL 命令创建这些表?忘记创建数据库,想象它已经存在。

最佳答案

您已获得代码。我想分享一些关于为什么您可能希望在这样的关系中拥有两个表的信息。

首先,当两个表具有相同的主键并且具有外键关系时,这意味着它们具有一对一的关系。那么为什么不把它们放在同一个表中呢?您可能会将某些信息拆分到单独的表中的原因有多种。

首先,信息在概念上是独立的。如果第二个表中包含的信息与单独的特定问题相关,则使用它会更容易,因为数据位于单独的表中。例如,在您的示例中,即使他们只想为每个 SKU 有一个记录,他们仍将图像分开。如果您决定需要多个图像,这使您可以灵活地在以后轻松地将表更改为一对多关系。这也意味着当您仅查询图像时,您不必实际访问另一个(可能更大的)表。

这给我们带来了这样做的两个理由。您当前具有一对一关系,但您知道 future 的版本已计划将其转变为一对多关系。在这种情况下,设计成单独的表会更容易,这样当您移动到该结构时就不会破坏所有代码。如果我打算这样做,我会继续创建一个代理键作为 PK,并在 FK 上创建一个唯一索引。这样,当您进入一对多关系时,您所要做的就是删除唯一索引并将其替换为常规索引。

分离出一对一关系的另一个原因是表是否变得太宽。有时,您拥有的实体信息太多,无法轻松适应记录可以拥有的最大大小。在这种情况下,您倾向于采用最少使用的字段(或概念上组合在一起的字段)并将它们移动到单独的表中。

将它们分开的另一个原因是,尽管您具有一对一的关系,但对于父表中的大多数记录,您可能不需要子表中的内容记录。因此,与其在父表中包含大量空值,不如将其拆分出来。

其他人显示的代码假设基于角色的 PK。如果您在具有自动生成 Int 或 GUID 时想要这种关系,则只需在父表上执行自动生成。然后,您将该值存储在子表中,而不是在该表上生成新值。

关于sql - 如何在两个表之间共享相同的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6046514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com