我正在学习 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 列表与产品表之间编写正式链接
您熟悉外键的概念吗?如果答案是“否”,那么这可能是您的教授不喜欢的。以您的regUsers
和orders
表为例,您可能需要使用如下所示的内容:
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
有些随意,因为我对您计划存储的数据一无所知。重要的部分是uID
在orders REFERENCES regUsers(uID)
. 这意味着表uID
中的所有值orders
也必须存在于regUsers
表中。
这里另一个有趣的点是:你声称你想uID
成为 的 PK orders
,但同时也是(它的外键)uID
的 PK 。regUsers
这意味着表中的每个uID
inregUsers
最多可以有一行orders
...这是您想要的吗?回想一下,PK 是独一无二的。
哪个链接到productNo PK上的productType
你的桌子也有同样的问题Product Type
。如果你要product_no
为该表进行 PK,那么每张表只能有一行product_no
;我认为这不是你想要的。如果这是您想要的,并且每个product_no
最多可以有一个type
,那么您可能会考虑将 存储type
在product
表中并避免将Product Type
表全部存储在一起。
另一个可能的点,你所说的(列表)是什么意思?我快速搜索了一下LIST
MS SQL Server 中是否有某种数据类型,但一无所获。您打算在此列中存储字符串列表吗?如果是这样,那么它是一个单独的表的良好候选者。
您是否考虑过需要执行哪些查询才能获取所需的信息?您为每列分配了哪些数据类型?一般来说,开始设计模式的一个好方法是创建 E/R 图,但在这种情况下,您可能需要做更多的研究。我在这里也可能是错的,如果您提供用于创建表的实际 SQL,我很乐意修改我的回复。