【问题标题】:Should identity column be added table that uses date and a foreign key?是否应该在使用日期和外键的表中添加标识列?
【发布时间】:2017-01-31 03:38:05
【问题描述】:

我正在制作一个小型 asp.net mvc 应用程序,它允许我为我和我家的人设置菜肴时间表。我有一张名为 DishDates 的表,它记录了谁在哪一天有一道菜。它当前包含 3 列(DishDateId、PersonId 和 Date)。 DishDateId 是 PK,PersonId 是 Person 表的 FK,Date 是上菜的日期。

在任何一天,我们只有一个人上菜。 PersonId 与日期相关联。我的应用程序可以自动生成当月的菜肴日历。现在,您还可以进入并重新生成一个已经创建的一个月的新菜列表,应用程序会删除该月的现有记录,然后创建它们。每次我这样做时,DishDateId 字段的值都会增加,因为它是一个标识列。

我知道这不会成为真正的问题,因为我仍然可以拥有超过 20 亿行,这足以比这个应用程序的生命周期更长。但是,在这种情况下,不使用身份列而只使用 PersonId 和 Date 字段并将 Date 作为 PK 会更聪明吗?我觉得 Identity 列有点碍事,或者没有必要。

【问题讨论】:

    标签: sql-server asp.net-mvc database tsql database-design


    【解决方案1】:

    当重新创建 PersonId 和 Dates 值时,您可以简单地在临时表中创建它们并使用基于匹配日期的 MERGE 函数(因为它们是常量值,而 PersonId 是任何给定行中的变量值)。

    是的,你不需要 DateDishId 本身的标识列,但是如果使用上面的过程,那么对于相同月份数据的每次迭代,行数都不会增加。

    我会让你计算一下用日期填写身份列需要多长时间,但鉴于身份可能是 INT,那么你、我、你的室友或我们所知道的世界它,不太可能在身边,所以没什么好担心的!

    【讨论】:

      【解决方案2】:

      是的,您可以根据您的要求将日期设置为 PK,因为它每天都会为下一个人分配新的日期,而且它也是您所说的身份列。

      困惑:您如何将身份分配给日期列?

      【讨论】:

      • 日期列不是标识列。 DishDateId 列是标识列。该数据库连接的应用程序生成菜肴日期并将其发送到该表。同样,鉴于要求,菜肴日期将是独一无二的,因为每天只有一个人上菜。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2016-02-04
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多