-1

我正在为我父母的比萨店开发一个系统。我的编程经验很少,我想做一个像样的 SQL 数据库,这样当我在编码方面变得更好时,它会更容易维护和改进。

到目前为止,我已经想出了以下内容(使用 db 浏览器帮助我进行可视化):

CREATE TABLE IF NOT EXISTS "client" (
        "id"    INTEGER,
        "name"  TEXT,
        "phone" TEXT,
        "neighborhood"  TEXT,
        "address"       TEXT,
        PRIMARY KEY("id")
);
CREATE TABLE IF NOT EXISTS "product" (
        "id"    INTEGER,
        "type"  TEXT,
        "flavour"       TEXT,
        "ingredients"   TEXT,
        "price" REAL,
        PRIMARY KEY("id")
);

我将创建第三个表,并且想知道当客户订购多个产品时"order"如何引用多个表?product.id

4

2 回答 2

1

教科书的解决方案是创建一个映射表来关联产品和订单。

CREATE TABLE IF NOT EXISTS "orders" (
        "id"         INTEGER,
        "order_date" DATETIME,
        -- Any other columns you may need
        PRIMARY KEY("id")
);

CREATE TABLE IF NOT EXISTS "order_products" (
        "product_id" INTEGER,
        "order_id"   INTEGER,
        FOREIGN KEY("product_id") REFERENCES product("id"),
        FOREIGN KEY("order_id")   REFERENCES orders("id"),
        PRIMARY KEY("product_id", "order_id")
);
于 2020-07-15T20:06:02.040 回答
0

您正在做的一些事情是数据建模。

  • 客户可以有多个订单。
  • 订单可以有多个产品。
  • 产品可以有多种成分。

所以order表格可能看起来像......

CREATE TABLE IF NOT EXISTS "order" (
    "OrderId"    INTEGER,
    "ClientId"   INTEGER,
    "ProductId"  INTEGER,
    "OrderDate"  DATETIME,
    "ScheduledDelivery" DATETIME,
    "ActualDelivery" DATETIME,
    "ProductQty" INTEGER,
    PRIMARY KEY("OrderId")
);

如果希望数据库强制引用完整性,可以添加 FOREIGN KEY 约束。(订单可以有不在桌子上的产品product吗?不在桌子上的人可以client下订单吗?)

我会调整列名(并添加一些)client并使product您未来的代码更清晰。

您的最后一个问题似乎是关于如何设计查询。您应该学习一些基本的 SQL 技能。(从您提供的 DDL 代码来看,您似乎进展顺利。)

在 SQL Server 中,示例查询可能如下所示:

select c.ClientName
, o.OrderDate
, p.ProductType
, p.ProductFlavour
from client c
  inner join order o on o.ClientId = c.ClientId
  inner join product p on p.ProductId = o.ProductId
where o.OrderDate

(我从未使用过 sqlite,所以我不知道是否有任何翻译问题。)

有很多书籍和网站可以帮助您进行数据建模和查询设计。

于 2020-07-15T20:17:07.127 回答