如何在SQL中将表与值(例如ID)绑定?

如何在SQL中将表与值(例如ID)绑定?,sql,attributes,Sql,Attributes,这实际上是两个关于网上书店的问题 我有一个SQL中的客户表,它包含所有客户信息,包括客户ID。然后我有一个满是销售书籍的表。最后,我有一张放购物车的桌子 现在,购物车将是一个非常类似于books表的表,只是它将有更少的项目,因为它将包含book表内容的一些子集 我希望整个购物车与单个客户的ID绑定,并且我希望购物车中的每个条目都直接来自Books表 如何定义这样一个表,我的意思是我需要什么语句 实际上,我对这个问题感到困惑,因为整个cart表本质上是单个客户的属性,但我不知道如何在SQL中表示它

这实际上是两个关于网上书店的问题

我有一个SQL中的客户表,它包含所有客户信息,包括客户ID。然后我有一个满是销售书籍的表。最后,我有一张放购物车的桌子

现在,购物车将是一个非常类似于books表的表,只是它将有更少的项目,因为它将包含book表内容的一些子集

我希望整个购物车与单个客户的ID绑定,并且我希望购物车中的每个条目都直接来自Books表

如何定义这样一个表,我的意思是我需要什么语句

实际上,我对这个问题感到困惑,因为整个cart表本质上是单个客户的属性,但我不知道如何在SQL中表示它。基本上,我希望能够使用客户ID查找购物车表


非常感谢您的帮助。

您基本上需要以下四张表格:

 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)数据类型如何溢出?这不是浮子