sql - 购物车、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
)
解决方案
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 ...
推荐阅读
- paypal - ColdFusion (CFML) 仅在使用 Paypal API 的移动设备上丢失会话变量
- reactjs - React FusionCharts 动态 Json
- java - 如何使用新 API (Java 9) 在运行时获取 JavaBean 信息?
- python - 我自己的 hot_labels 和用函数创建 hotlabels 有什么区别?
- r - 参数不是数字或逻辑:返回 NA
- java - Android:如何将自定义字体应用于 TabLayout 中的活动选项卡?
- jestjs - 为什么不调用 jest.fn
- c# - 我的 Death() 方法正在进行勾结,但当我摔倒时无法获得 deathMenu
- php - 特定行 ID 的引导模式形式
- javascript - 在 javascript 中创建一个 util 类