0

我目前正在開發一個軟件工程類的ASP.Net MVC項目。我的目標是創建一個小型在線遊戲租賃系統。我目前有3桌,電影,遊戲和註冊人;我正在使用LINQ-to-SQL將這些表中的每一個定義爲我的模型的類。到目前爲止,我已經爲電影和遊戲創建了模型,創建註冊人模型時我想要做的是在註冊人和電影和遊戲之間建立關係。到目前爲止,我嘗試的是在電影和遊戲中的ID(註冊人表中的主鍵)和註冊人ID字段之間定義外鍵。我意識到,如果我要刪除註冊人的實例,它會從其他表中刪除關聯的電影和/或遊戲。我想要做的是創建兩個單獨的模型,定義rentedGames和rentedMovies,並創建這些與Games和Movies表之間的關係,以嘗試和模擬租戶/返回/從商店購買電影或遊戲的註冊人。關係數據庫表

總結:

我有什麼至今:

  • 3個表:報名後,電影和遊戲 。
  • 我的 清單的電影和遊戲的LINQ到SQL模型。

我試圖設置:

  • 一種用於登記租賃模式/返回影片和/或遊戲,當遊戲是租/返回,標誌被放在旁邊的清單中的項目以指示其狀態。

問:

  • 將增加單獨的表來模擬 租來的電影/遊戲防止從 我的庫存模型定義的項目 被刪除?即,當顧客返回租借的電影時,租賃的電影實例被刪除,但電影在電影庫存中不是指的。

  • 是否有這樣的事,作爲一個相關 爲表上 相關條目設置狀態標誌,而不是在 項被刪除,只要在其他表 的 的相關條目修改?即,當客戶返回租用的電影時,租用的電影實例在電影中設置標誌,指​​示它可用於出租,然後刪除租賃的電影實例。

回答

0

你說得對創建rentedGames和rentedMovies單獨的表,因爲這種模式現在允許一個以上的電影或遊戲類型相同,同時被租來的,這是肯定比其更現實的只有一個特定的電影或遊戲的實例。

當鏈接記錄(rentedMovie,say)被刪除時,這將防止刪除父記錄。但是,如果您將關係設置爲「級聯刪除」,並且您允許原始電影或遊戲表格中的註冊人ID字段爲空,則不應該發生父級電影的刪除。

要回答你的第二個問題(我認識到其中只有一個電影/遊戲是針對任何特定題目的):如果你正在使用鏈接表,這就是你想要做的事,刪除租借的電影/遊戲記錄。任何電影或遊戲缺少鏈接記錄都是您的代碼需要確定的,以便知道該電影或遊戲現在可以再次出租。

0

我知道你正在爲一個班級/實踐做這件事,所以這可能不相關,但考慮到有事物租賃歷史往往是非常有用的。因此,您可能不想刪除租用的記錄,而只是將該項目標記爲已返回。

考慮:

TABLE RentalTransaction: 
RentalTransactionID integer PK NOT NULL 
CustomerID integer FK NOT NULL 
RentedOn datetime NOT NULL 
DueDate datetime NOT NULL 
<..any other fields you may need..> 

TABLE RentalItems: 
RentedID integer PK NOT NULL 
RentalTransactionID integer FK NOT NULL 
RentedItemID integer FK NOT NULL 
RentedQty integer NOT NULL 
RentalRetuned datetime NULL 

你可以看到,如果任何單個產品或不被通過,如果是RentalReturnednull與否。如果它是無效的,那麼你知道該項目回來了,現在你可以彙總租賃數據,看看它多久發生一次,租金的平均長度等等,你將不得不建立一些檢查,以使確定你沒有租用一個項目的副本,而不是你實際擁有的和其他類似的東西,但是我認爲這對於一個模式來說是一個更加靈活的開始。對於你在做什麼而言,這可能也過於複雜,但我想至少把這個想法提出來。

0

您確實要刪除rentedMovie實例嗎?你將如何報告一個人租了多少部電影等?

我建議稍微反思一下你的模型。作爲第一步,您需要某處存儲人員數據,某處存儲項目數據以及某處存儲人員/項目數據。

現在忽略電影和遊戲之間的區別 - 一旦你定義了你的基礎結構,這就成了一個規範化的過程。

舉一個簡單的出發點,你應該有:

人1..1 ---- 1 .. *業務聘請0 .. * ---- 1..1項目

其中僱用表是兩個人之間的鏈接表,由personID,ItemID和一些描述的時間戳組成(可允許重新租用同一部電影)。

然後你可以看一下具有項目類型等

1

我會去了解這個有一點不同一個單獨的表。首先,是否有真正的理由將MovieGame視爲單獨的實體?爲什麼不能有一個RentableItem可以是電影,遊戲,遊戲機,藍光播放器或其他?你會用item_id領域的關鍵是,它會具有預期的元數據(titletypegenrerental_class, and so on). 然後,你需要建模的事實Registrant租賃一個或多個RentableItems,這可以用Rental表來完成,它們的行每個連接一個租用的RentableItem與一個特定的Registrant(即,Rental被鍵入rental_id並且它具有到RentableItem.item_id的外鍵以及到Registrant.registrant_id的外鍵。該Rental也將具有到期日,「返回「國旗,租金的價格等

然後,您知道RentableItem不在商店中,前提是租賃記錄的item_id與RentableItem相同,其「返回」標誌爲false。您無需修改​​RentableItem表格本身,只需修改Rental表格。

0

首先要考慮的是一部電影實際上是兩個實體,標題和媒體。標題是「指環王」,而媒體是你帶回家的DVD。一個標題可以有多個媒體(副本),而一個媒體有一個標題。 Rental表對於每個媒體出租都有一排,每次在出租時掃描條形碼時,此表會獲得一個新行,而DateReturned在返回時填充。 Status表中的Media字段會跟蹤每個光盤/遊戲的輸入/輸出狀態。 如果您覺得需要跟蹤哪些電影一起出租給客戶,您可能會發現通過DateRented(日期時間)或將ReceiptNumberShoppingBasketID添加到Rental表。

gamerental_model_01