首页 > 解决方案 > 购物车、SQL、逻辑模型的复合键

问题描述

我正在为购物车项目制作一个逻辑模型,然后我进入了下一个问题。如果我想添加 2 个相等的产品(例如:2 支铅笔)会怎样?

逻辑模型:在此处输入图像描述 物理模型:在此处输入图像描述

我认为的一个解决方案是制作一个复合键或复合属性,在第一部分中存储增量 int 属性,在第二部分中存储产品 id,因此您可以输入购物车 2 产品,尽管在第二部分中具有相同的 product_id在增量的第一部分中有所不同。

你怎么看?这是一个好主意还是有人有更好的解决方案?

CREATE TABLE Carro 
(
 id_carro INTEGER NOT NULL 
)
ALTER TABLE Carro ADD CONSTRAINT Carro_PK PRIMARY KEY CLUSTERED (id_carro)
 WITH (
 ALLOW_PAGE_LOCKS = ON , 
 ALLOW_ROW_LOCKS = ON )

CREATE TABLE Orden_Detalle 
(
 id_ord_det INTEGER IDENTITY NOT NULL , 
 Carro_id_carro INTEGER NOT NULL , 
 Producto_id_prod INTEGER NOT NULL 
)

ALTER TABLE Orden_Detalle ADD CONSTRAINT Orden_Detalle_PK PRIMARY KEY CLUSTERED (id_ord_det, Producto_id_prod)
 WITH (
 ALLOW_PAGE_LOCKS = ON , 
 ALLOW_ROW_LOCKS = ON )

CREATE TABLE Producto 
(
 id_prod INTEGER NOT NULL , 
 name_prod VARCHAR (20) , 
 value_prod INTEGER 
)
ALTER TABLE Producto ADD CONSTRAINT Producto_PK PRIMARY KEY CLUSTERED (id_prod)
 WITH (
 ALLOW_PAGE_LOCKS = ON , 
 ALLOW_ROW_LOCKS = ON )

ALTER TABLE Orden_Detalle 
ADD CONSTRAINT Orden_Detalle_Carro_FK FOREIGN KEY 
( 
 Carro_id_carro
) 
REFERENCES Carro 
( 
 id_carro 
) 

ALTER TABLE Orden_Detalle 
ADD CONSTRAINT Orden_Detalle_Producto_FK FOREIGN KEY 
( 
 Producto_id_prod
) 
REFERENCES Producto 
( 
 id_prod 
) 

标签: sqlsql-server

解决方案


I would suggest you to have two tables for Orders: OrderMaster, OrderDetails. This way, you can see all the details for a specific Order. I am assuming that every order has got one-one mapping with cart.

For your question, you don't need composite key. Just incremental Order details Id is enough. You can find order details for an order using OrderId.

  • OrderMaster : OrderId(Incremental, PK),CartId(FK)
  • OrderDetails: OrderDetailsId(Incremental, PK),OrderId(FK),ProductId(FK)
  • Cart: CartId(PK), CartName, ...
  • Product: ProductId(PK), ProductName, ProductValue ...

推荐阅读