Создание связи «многие к одному» между таблицами в db MVC 3 Website Project - PullRequest
1 голос
/ 12 марта 2012

Я работаю над веб-сайтом MVC 3 для малого бизнеса, у которого есть база данных, содержащая несколько таблиц. Есть таблица для Продуктов, таблица для Обратной связи и таблица, к которой относится этот вопрос: Заказы.

Для размещения заказов я настроил корзину покупок. Когда пользователь готов оформить заказ, он вводит некоторую информацию и назначает дату получения. Этот «Порядок» затем сохраняется в базе данных, где администраторы могут увидеть и ответить. Мне нужно сохранить товары из корзины покупок в списке, который будет содержаться в объекте с именем OrderInfo.

У меня вопрос: как мне установить связь между таблицами (внешними ключами), чтобы получить новую таблицу, которая связывает идентификаторы OrderID с сущностями Product, которые находятся в этих заказах?

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Не сохраняйте товары из заказа в одном поле в виде списка. Поля должны быть атомарными, и хранить списки в таком виде - плохая форма.

Вместо этого имейте отдельную таблицу под названием orderItem, в которой каждый продукт хранится в отдельной строке и сопоставляется с порядком, к которому он принадлежит, с помощью FK в таблице Order.

0 голосов
/ 12 марта 2012

Если у вас есть такие таблицы:

create table Products
(
    pkProducts int not null primary key clustered,
    Name varchar(256) not null,
    ....
)

create table Orders
(
    pkOrders int not null primary key clustered,
    Name varchar(256) not null,
    ....
)

Затем вы создадите объединительную таблицу, в которой будут храниться отношения «многие ко многим» между продуктами и заказами:

create table OrderProduct
(
    fkOrders int foreign key references Orders (pkOrders),
    fkProducts int foreign key references Products (pkProducts)
)

Если вы хотите получить все товары из определенного заказа (я использовал Name для заказа, но вы можете использовать более подходящее поле для логики вашего домена):

select p.Name
from Products p
inner join OrderProduct op
on p.pkProducts = op.fkProducts
inner join Orders o
on o.pkOrders = op.fkOrders
where o.Name = 'Some Order Name'
...