ERD для ShoppingCart - PullRequest
       15

ERD для ShoppingCart

1 голос
/ 04 апреля 2011

Я немного озадачен диаграммой отношений сущностей для моего приложения.

Пока что я создал таблицы для продукта, клиента, категории

Должен ли я создать таблицу для UserAccounts, в которой хранятся идентификатор и пароль для Клиента, или непосредственно поместить идентификатор и пароль в таблицу Customer?

Во-вторых, у каждого покупателя будет собственная корзина. Итак, я сделал таблицу CartItem

CartItemId, Код товара, CategoryId, Описание, Цена за единицу, TotalPrice

Но эта таблица не связывает клиента с элементом CartItem в корзине. Так должен ли я добавить здесь CustomerId?

Есть ли необходимость в описании и цене за единицу, поскольку они уже определены в таблице продуктов?

и для тележки, CartId, CartItemId, CustomerId

Мне нужно кое-что прояснить, прежде чем я найду какие-либо ошибки в своем заявлении.

DDL:

   CREATE DATABASE ShoppingCart

   Create Table Customer(
   CustomerId int PRIMARY KEY,
   Firstname varchar(50),
   Lastname varchar(50),
   Address varchar(50),
   City varchar(50),
   State varchar(50),
   Country varchar(50),
   Mobile varchar(50),
   Phone varchar(50),
   Email varchar(50)
   )

   Create Table UserAccount(
   UserName varchar(50),
   PasswordHash varchar(50)
   )

   Create Table Category(
   CategoryId int PRIMARY KEY,
   CategoryName varchar(50),
   CategoryDescription varchar(50),
   CategoryImage varchar(50)
   )

   Create Table Products(
   ProductId int PRIMARY KEY,
   ProductName varchar(50),
   Description varchar(50),
   CategoryId int,
   UnitPrice money,
   DateAdded datetime,
   thumn varchar(50),

   CONSTRAINT fk_CategoryId FOREIGN KEY (CategoryId)
   REFERENCES Category(CategoryId)
   )



Create Table CartItem(
CartItemId int,
ProductId int,
CategoryId int,
Description varchar(50),
UnitPrice money,
TotalPrice money,

PRIMARY KEY (CartItemId),
CONSTRAINT fk_ProductId FOREIGN KEY (ProductId)
REFERENCES Products(ProductId),

CONSTRAINT fk_CartItem_CategoryId FOREIGN KEY (CategoryId)
REFERENCES Category(CategoryId)

)

Create Table Cart(
CartId int,
CartItemId int,
ProductId int,
CategoryId int,
Description varchar(50),
UnitPrice money,
TotalPrice money,

PRIMARY KEY (CartId),

CONSTRAINT fk_CartItemId FOREIGN KEY (CartItemId)
REFERENCES CartItem(CartItemId),

CONSTRAINT fk_CartItem_CategoryId FOREIGN KEY (CategoryId)
REFERENCES Category(CategoryId),

PRIMARY KEY (ProductId),
CONSTRAINT fk_CartItemId FOREIGN KEY (ProductId)
REFERENCES CProducts(productId)

)

1 Ответ

2 голосов
/ 04 апреля 2011

# 1 Не хранить пароль - хранить соленый хеш .

Не указывать идентификатор клиента в таблице элементов корзины, если он уже получен черезпросматривая таблицу Cart.

В данный момент, я думаю, вы не понимаете, что таблицы Cart и CartItem почти идентичны.

UserAccount, по-видимому, осиротел.Он должен быть либо в таблице Customer, либо каким-либо образом связан.

Я бы удалил CategoryId, Description, UnitPrice и TotalPrice из CartItem (так как они находятся в Product), если продукты не настроены в корзине покупок для каждого клиента.Вы также рискуете позволить пользователю проверить товар по старой цене (если вы не относитесь к корзинам как к кавычкам, что является совершенно другим бизнес-доменом).

CartItem нужен способ добраться до своегоКорзина или клиент.

Вот что я хотел бы сделать:

Category (CategoryID (PK), etc.)

Customer (CustomerID (PK), etc.)

Product (ProductID (PK), CategoryID (FK), etc)

Cart (CartID (PK), CustomerID (FK), ProductID(FK), Quantity)

Когда корзина становится заказом, обычно таблица подробностей заказа или счета-фактуры фиксирует цену и, возможно, названиепродукта, и корзина будет очищена для потребителя.Многое из этого зависит от дальнейших потребностей бизнеса.

...