0

В настоящее время я работаю над проектом ASP.Net MVC для класса разработки программного обеспечения. Моя цель - создать небольшую систему аренды онлайн-игр. В настоящее время у меня есть 3 стола, фильмы, игры и регистраторы; и я использую LINQ-to-SQL для определения каждой из этих таблиц в качестве классов для моей модели. Пока я создал модели для фильмов и игр, то, что я хотел бы сделать при создании модели «Регистрант», - это создать отношения между владельцами регистраций и фильмами и играми. До сих пор я пытался определить внешний ключ между идентификатором (первичный ключ в таблице «Регистрант») и полем идентификатора пользователя в фильмах и играх. Я понял, что если я удалю экземпляр регистратора, он удалит связанный фильм и/или игру из других таблиц. То, что я собираюсь сделать, это создать две отдельные модели, определяющие арендованные игры и арендованныеМоии, и создать связь между ними и таблицей «Игры и фильмы», чтобы попытаться смоделировать арендатора, снимающего/возвращающего/покупающего фильмы или игры из магазина.Таблицы реляционной базы данных

В Резюме:

То, что я до сих пор:

  • 3 таблицы: Администраторах, Фильмы и игры.
  • Модели LINQ-to-SQL для моего инвентаризации фильмов и игр.

То, что я пытаюсь настроить:

  • модель для регистранта аренды/возвращения в кино и/или игры, когда игра арендовал/возвращается, флаг помещается рядом с в инвентаре, чтобы указать его статус.

Вопрос:

  • будет добавлять отдельные таблицы для моделирования арендованного фильма/игры мешают элементы , определенные в моей модели кадастровых удаляемого ?? то есть когда клиент возвращает арендованный фильм, экземпляр rentedMovie удаляется, но не фильм относится к ресурсу фильма.

  • Есть ли такая вещь, как взаимосвязанное таблицы, имеющей флаг состояния, установленный на входе, связанных , в отличие от записи удаляемого, когда связанная запись в другой таблице модифицируется ?? то есть когда клиент возвращает арендованный фильм, экземпляр rentedMovie устанавливает флаг в фильме, на который он ссылается, что он доступен для аренды, тогда экземпляр rentedMovie удаляется.

ответ

0

Вы правы, чтобы создать отдельные таблицы для rentedGames и rentedMovies, так как эта модель позволяет теперь более одного фильма или игры одного и того же типа, которые арендовали в то же самое время, что, несомненно, более реалистичным, чем с только один экземпляр конкретного фильма или игры.

Это предотвратит удаление родительской записи, когда запись ссылки (rentedMovie, say) будет удалена. Но это удаление родительского фильма не должно происходить в любом случае, если вы настроили свои отношения, а не «каскадное удаление», и вы допустили, чтобы поле registeristrIDID в исходных файлах Movies или Games было равно NULL.

Чтобы ответить на ваш второй вопрос (который, как я понимаю, предполагает только один фильм/игру для любого названия участника): как это обычно делается, если вы используете таблицы ссылок, что вы хотите сделать, это просто для удаления арендованной записиMovie/Game. Отсутствие записи ссылки для любого фильма или игры - все, что вам нужно определить, чтобы узнать, что этот фильм или игра теперь можно арендовать (снова).

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 

Вы можете увидеть, если какой-либо отдельный элемент находится вне или нет, если это RentalReturned поле null или нет. Если он не является искомым, то вы знаете, что элемент вернулся, и теперь вы можете агрегировать данные аренды, чтобы узнать, как часто это происходит, какова средняя продолжительность аренды и т. Д. И т. Д. Вам нужно будет создать некоторые проверки, чтобы сделать что вы не сдавали в аренду больше копий предмета, чем на самом деле, и другие подобные вещи, но я думаю, что это в целом более гибкое начало схемы. Это может быть слишком сложно для того, что вы делаете, но я хотел хотя бы довести эту идею до конца.

0

Удалить Вы хотите удалить экземп »rentedMovie? Как вы сообщаете о том, сколько фильмов снимает человек и т. Д.?

Я предлагаю немного передумать модель. Вам нужно где-то хранить данные о людях, где-то хранить данные о товарах и где-то для хранения данных людей/предметов в качестве первого шага.

Игнорировать разницу между фильмами и играми на данный момент - это процесс нормализации, как только вы определили свою базовую структуру.

В качестве простой отправной точки вы должны иметь:

Лицо 1..1 ---- 1 .. * .. нанимает 0 * ---- 1..1 товаров

где Таблица Hires является связующим столом между двумя другими с комбинированным ключом, состоящим из personID, ItemID и отметкой времени некоторого описания (чтобы разрешить повторное сдачу одного и того же фильма).

Вы можете посмотреть на имеющие отдельную таблицу для типов элементов и т.д.

1

я бы об этом немного по-другому. Во-первых, есть ли настоящая причина рассматривать Movie и Game как отдельные объекты? Почему бы не иметь RentableItem, который может быть либо фильмом, игрой, игровой машиной, игроком Blue-Ray, или чем-то еще? Вы бы ввести его в item_id поле, и он будет иметь ожидаемого метаданные (title, type, genre, rental_class, and so on). Тогда вам нужно смоделировать тот факт, что Registrant арендует один или более RentableItems. Это может быть сделано с помощью таблицы Rental , строки которой каждый подключить один арендованный RentableItem с определенным Registrant (то есть, Rental является ключом на rental_id и имеет внешний ключ к RentableItem.item_id и внешнему ключ к Registrant.registrant_id. Rental также будет иметь надлежащий срок «вернулся «флаг, цена аренды и т. д.

Знаете ли вы, что RentableItem не находится в магазине, если есть запись о аренде, чей item_id такой же, как у RentableItem, и чей флаг «возвращен» является ложным. Вам никогда не придется изменять таблицу RentableItem, только таблицу Rental.

0

Первое, что нужно учитывать, это то, что фильм на самом деле является двумя сущностями, заголовком и носителями. Название - «Властелин Колец», а медиа - это DVD, который вы забираете домой. Один заголовок может иметь много носителей (копий), в то время как один носитель имеет один заголовок. Таблица Rental имеет строку для каждого медиа-проката, эта таблица получает новую строку каждый раз, когда штрих-код сканируется при аренде, а DateReturned заполняется по возвращении. Поле Status в таблице Media отслеживает статус входа/выхода для каждого диска/игры. Если вы считаете, что вам нужно отслеживать, какие фильмы были арендованы вместе с клиентом, вы можете обнаружить, что на DateRented (datetime) или добавьте ReceiptNumber или ShoppingBasketID в таблицу Rental.

gamerental_model_01

Смежные вопросы