-1

У меня есть следующая Диаграмма классов:Лучшего Проектирование базы данных для циркулярных отношений

 

Customer 

Id 
Name 
Email 

 

Packages 

Id 
Name 
ImageUrl 
Price 
Description 
Products (One package may have 1 to many products) 

 

Products 

Id 
Name 
ImageUrl 
Price 
Description 

 

Orders 

Id 
CustomerId 
Address 

Как я могу сделать отношения между заказами, продуктами и пакетами. Я использую Entity Framework 6 Code First с MVC 5 webapi.

Отредактировано:

  • Заказчик может разместить несколько заказов, один заказ связан только с одним клиентом
  • Один заказ может содержать несколько продуктов, один продукт может иметь несколько заказов
  • Клиент может заказать несколько пакетов, один пакет может быть заказан несколькими клиентами.
  • Thanks
+0

Это зависит от отношений, которые вы хотите между ними. Как они связаны? – venerik

+0

Какое круговое отношение? – user2864740

+0

Кроме того, «asp.net [anything]» не является соответствующим тегом здесь; если необходимо добавить в «сущность-каркас» или конкретный инструмент моделирования/сопоставления, используемый, если применимо. – user2864740

ответ

1
  1. Customer - Orders есть отношения друг к другу. Потребуется ForeignKey CustomerId в Orders. Таким образом, это должно быть сделано.
  2. Orders - Products У многих есть много отношений. Будет требоваться много-много таблиц (например, RelatedOrderProducts) с полями внешнего ключа OrderId и ProductId таблиц Orders и Products соответственно.
  3. Customer и Packages также являются очень многими отношениями. Так же, как и выше, должно быть много-много таблиц (RelatedPackagesCustomers) с полями внешнего ключа PackageId и CustomerId таблиц Packages и Customers соответственно.

Я не знаком с Entity Framework, MVC, но это дизайн базы данных, за которым вы можете следовать.

EDIT:

я, возможно, не поняли третье отношения. Есть несколько исправлений, которые могут работать в зависимости от того, как вы хотите получить доступ к данным. Одним из возможных изменений является изменение таблицы RelatedPackagesCustomers на таблицу RelatedOrderPackages и соответственно внешних ключей. Таким образом, у вас будут два отношения, заказные пакеты и заказные продукты, которые сохранят ваш заказ с комбинацией пакетов и продуктов.

Для того чтобы сэкономить, вы должны сделать заказ и использовать команду OrderId, чтобы добавлять товарные и упаковочные отношения в свои соотв. таблицы отношений.

Когда вам нужно, чтобы получить список всех пакетов и продуктов, которые клиент заказал до даты, вы будете делать запрос о Order с CustomerId и над ним сделать два JOIN запросов, которые будут получать вам пакеты из RelatedOrderPackages и продукты от RelatedOrderProducts, связанные с конкретным OrderId (косвенно связанные с клиентом).

+0

Спасибо hooSein, скажите мне, что клиент может заказать пакеты, как я должен сохранять эту информацию, чтобы получить этот заказ в таблице заказов? Например, один клиент может заказать несколько пакетов (например, пакет 1, пакет 2) и несколько продуктов (гамбургер, холодный напиток). Таким образом, его заказ будет пакетом 1 + пакет 2 + бургер + холодный напиток. Это один заказ, так как я сохраню это как заказ. –

+0

Пожалуйста, посмотрите, подходит ли редактирование. – hooSein

+0

В этом случае это будет круговое отношение: i.e Заказ имеет отношение к продуктам, которые имеют отношение к пакетам, которые имеют отношение с порядком снова. –

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