2016-09-22 60 views
0

我正在製作一個小型的asp.net mvc應用程序,它允許我爲我和我家裏的人設置菜譜表。我有一張名爲DishDates的表格,用於跟蹤誰在哪一天的某個菜餚日。它目前包含3列(DishDateId,PersonId和Date)。 DishDateId是PK,PersonId是Person表的FK,Date是餐具在一天中的日期。應該添加使用日期和外鍵的標識列嗎?

我們在任何一天只有一個人在菜餚上。 PersonId綁定到日期。我的應用程序可以自動生成月份的菜餚日曆。現在,您還可以進入並重新生成一個已經創建了一個月的新菜單列表,應用程序將刪除當月的現有記錄,然後創建它們。每次我這樣做時,DishDateId字段的值都會增加,因爲它是一個標識列。

我知道這不會是一個真正的問題,因爲我可以擁有超過20億行仍然足以超過此應用程序的生命週期。但是,這會是一個更聰明的情況,不使用標識列,只需要PersonId和Date字段並使Date成爲PK?我覺得身份專欄只是某種方式或某種東西,或者是不必要的。

ScreenShot of DishDates Data

回答

1

當重新創建PersonId和Dates值時,可以簡單地在臨時表中創建它們,並根據匹配日期使用MERGE函數(因爲它們是常量值,PersonId是任何給定行中的變量值)。

是的,您不需要DateDishId本身的標識列,但是如果使用上述過程,那麼對於同一個月份數據的每次迭代,行數不會增加。

我會讓你計算需要多長時間來填寫身份列與日期,但鑑於身份可能是一個INT,那麼你,我,你的室友,或我們的世界知道它,不太可能在周圍,所以沒有什麼可汗!

0

是的,你可以設置日期PK按照您的要求,因爲它每天都指派新的日期旁邊的人,也很標識列如你所說。

混亂:您如何爲日期列指定標識?

+0

日期列不是標識列。 DishDateId列是標識列。此數據庫所連接的應用程序會生成料理日期並將其發送到此表。同樣,考慮到要求,洗碗碟將是獨一無二的,因爲每天只有一個人在菜餚上。 – kcon90