如何在SQL中将表与值(例如ID)绑定?
这实际上是两个关于网上书店的问题 我有一个SQL中的客户表,它包含所有客户信息,包括客户ID。然后我有一个满是销售书籍的表。最后,我有一张放购物车的桌子 现在,购物车将是一个非常类似于books表的表,只是它将有更少的项目,因为它将包含book表内容的一些子集 我希望整个购物车与单个客户的ID绑定,并且我希望购物车中的每个条目都直接来自Books表 如何定义这样一个表,我的意思是我需要什么语句 实际上,我对这个问题感到困惑,因为整个cart表本质上是单个客户的属性,但我不知道如何在SQL中表示它。基本上,我希望能够使用客户ID查找购物车表如何在SQL中将表与值(例如ID)绑定?,sql,attributes,Sql,Attributes,这实际上是两个关于网上书店的问题 我有一个SQL中的客户表,它包含所有客户信息,包括客户ID。然后我有一个满是销售书籍的表。最后,我有一张放购物车的桌子 现在,购物车将是一个非常类似于books表的表,只是它将有更少的项目,因为它将包含book表内容的一些子集 我希望整个购物车与单个客户的ID绑定,并且我希望购物车中的每个条目都直接来自Books表 如何定义这样一个表,我的意思是我需要什么语句 实际上,我对这个问题感到困惑,因为整个cart表本质上是单个客户的属性,但我不知道如何在SQL中表示它
非常感谢您的帮助。您基本上需要以下四张表格:
create table books (book_id int, name varchar(200), author(200));
create table customers (customer_id int, name varchar(200));
create table carts (cart_id int, customer_id int);
create table cart_details (cart_id int, line_number int, book_id int, qty int, price numeric(18,2));
本质上,您将存储以下对象:
书籍表格
客户
表购物车
和购物车详细信息
表<代码>购物车将代表特定客户的购物车,购物车详细信息
将代表购物车的内容select * from carts inner join customers using (customer_id);
如果您还需要购物车的详细信息,可以执行以下操作:
select * from carts
inner join cart_details using (cart_id)
inner join customers using (customer_id)
;
注意:由于您没有提供正在使用的RDBMS,因此尝试以尽可能通用的SQL语法编写示例。另外,故意省略与主键和外键相关的所有详细信息,以便您可以首先了解表及其属性。您可以通过创建一个引用
客户
和书籍
表的CustomerCart
表来解决此问题。它可以有如下格式(我尽量不针对具体的实现,部分原因是您没有指出您使用的是什么RDBMS):
- 由CustomerId+CartId组成的复合主键(允许客户拥有多个/保存的/历史的Cart)
- BookId(每条记录表示目录中添加到客户购物车中的一本书的实例)
- 与给定客户购物车中给定书籍实例相关的度量,例如数量
- 像这样思考你的问题。。。一个客户的购物车中可以有很多书,而一本书可以存在于多个客户的购物车中,因此您有一个
考虑到这一点,处理此问题的方法是创建一个表,跟踪客户和书籍之间的关联,包括任何其他相关信息
create table shopping_cart (
customerId int,
bookId int,
quantity int,
etc...
)
这取决于您希望购物车支持的功能 最简单的方法是使用BookID和CustomerID创建购物车表。但是,如果客户或账簿被删除;如果允许,您将自动从某人的购物车中删除某些内容。。。或者,如果某人被删除,则为其删除所有购物车项目。。。你想这样吗?如果没有,那么您需要将所有账簿和客户信息保存在购物车中 第二,你想在“购物车”中记录他们一段时间内购买的所有物品吗?你想让他们能够在购物车中使用一部分物品结账吗?购物车的使用寿命是他们访问网站的时间,还是物品返回后会保留数月/数年
这类问题的答案决定了合适的设计。可能应该在carts表中添加一个状态标志enum(在cart中、订购、计费、装运等),而18,2对于书籍来说是多余的:)11,2对于非常昂贵的书籍也很好,并且不会溢出浮动。@Ariel:true。为了简单起见,省略了很多字段。Op正试图从根本上理解表/属性/关系。@Ariel
18,2
在美元方面可能有些过分。世界上还有其他国家和货币,如果超过15,*
将使浮动溢出,需要更复杂的编程。如果你有一种通货膨胀率如此之高的货币,你可以使用整数类型,因为它们不需要分数(美分)。@Ariel:我不理解你的评论。数字(15,2)数据类型如何溢出?这不是浮子