应该在标识列中添加使用日期和外键的表吗?

时间:2016-09-22 13:55:13

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

我正在制作一个小型的asp.net mvc应用程序,它允许我为我和我家里的人设置菜肴时间表。我有一张名为DishDates的桌子,可以跟踪谁在哪个日期有一个菜肴日。它目前包含3列(DishDateId,PersonId和Date)。 DishDateId是PK,PersonId是人员表的FK,日期是菜肴当天的日期。

我们每天只有一个人在菜上。 PersonId与日期绑定。我的应用程序可以自动生成本月的菜肴日历。现在,您还可以进入并重新创建已创建一个月的新菜单列表,应用程序将删除该月的现有记录,然后创建它们。每次执行此操作时,DishDateId字段的值都会增加,因为它是一个标识列。

我知道这确实是一个问题,因为我仍然可以拥有超过20亿行,这足以比这个应用程序的生命周期更长。但是,如果不使用标识列并且只使用PersonId和Date字段并使日期成为PK,那么这种情况会更明智吗?我觉得Identity列只是某种方式,或者是不必要的。

ScreenShot of DishDates Data

2 个答案:

答案 0 :(得分:1)

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

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

我会让你计算用你的日期填充标识栏需要多长时间,但鉴于身份可能是INT,那么你,我,你的室友,或者世界是我们知道,不太可能出现在周围,所以没什么好冒汗的!

答案 1 :(得分:0)

是的,您可以根据您的要求将日期设置为PK,因为它会将每天的新日期分配给下一个人,也就像您所说的那样是标识列。

混淆:如何将身份分配给日期列?