设计购物车网站数据库的正确方法

5 database-design

我正在学习 Web 应用程序课程。我的老师真的不喜欢我数据库的布局,说它几乎在所有方面都不正确。快进 2 个月,当我用一种新语言重新制作网站时。我这辈子都看不出哪里出了问题。制作此布局的正确方法是什么?我必须使用这些并且仅使用这些表。

regUsers:
un
addr
PK uID
email
etc
Run Code Online (Sandbox Code Playgroud)

链接到相互 PK uID 上的订单

orders:
orderID
pk uID

Links to orderDetail on orderID

orderDetail:
PK orderID
total
items (list)
date
address
Run Code Online (Sandbox Code Playgroud)

项目中的每个项目都链接到产品。不确定如何在产品 ID 列表与 MS SQL Server 2008 中的产品表之间写入正式链接

product:
PK prodectNo
Pname
notes
price
imgpath
stock
Run Code Online (Sandbox Code Playgroud)

哪个链接到 productType 上的 productNo PK

Product Type:
productNo
type
Run Code Online (Sandbox Code Playgroud)

小智 2

我将尝试将表格布局得更清晰一些,这样我就可以确定我们的想法是一致的。

regUsers( uID PK, un, addr, email, etc);
orders( uID PK,orderID);
orderDetail( PK orderID, total, items (list), date, address);
product( prodectNo PK, Pname, notes, price, imgpath, stock);
Product_Type( productNo, type);
Run Code Online (Sandbox Code Playgroud)

如果你给出了 SQL,那么我可能会告诉你你的老师不喜欢什么。目前我只能提供猜测。

items 中的每个项目都链接到产品。不确定如何在 MS SQL Server 2008 中的产品 ID 列表与产品表之间编写正式链接

您熟悉外键的概念吗?如果答案是“否”,那么这可能是您的教授不喜欢的。以您的regUsersorders表为例,您可能需要使用如下所示的内容:

CREATE TABLE regUsers(
 uID INT PRIMARY KEY,
 un VARCHAR,
 addr VARCHAR,
 email VARCHAR,
 etc VARCHAR);

CREATE TABLE orders(
 uID INT PRIMARY KEY REFERENCES regUsers(uID),
 orderID INT);
Run Code Online (Sandbox Code Playgroud)

我的选择VARCHAR有些随意,因为我对您计划存储的数据一无所知。重要的部分是uIDorders REFERENCES regUsers(uID). 这意味着表uID中的所有值orders也必须存在于regUsers表中。

这里另一个有趣的点是:你声称你想uID成为 的 PK orders,但同时也是(它的外键)uID的 PK 。regUsers这意味着表中的每个uIDinregUsers最多可以有一行orders...这是您想要的吗?回想一下,PK 是独一无二的。

哪个链接到productNo PK上的productType

你的桌子也有同样的问题Product Type。如果你要product_no为该表进行 PK,那么每张表只能有一行product_no;我认为这不是你想要的。如果这是您想要的,并且每个product_no最多可以有一个type,那么您可能会考虑将 存储typeproduct表中并避免将Product Type表全部存储在一起。

另一个可能的点,你所说的(列表)是什么意思?我快速搜索了一下LISTMS SQL Server 中是否有某种数据类型,但一无所获。您打算在此列中存储字符串列表吗?如果是这样,那么它是一个单独的表的良好候选者。

您是否考虑过需要执行哪些查询才能获取所需的信息?您为每列分配了哪些数据类型?一般来说,开始设计模式的一个好方法是创建 E/R 图,但在这种情况下,您可能需要做更多的研究。我在这里也可能是错的,如果您提供用于创建表的实际 SQL,我很乐意修改我的回复。