sql - 如何为一对多关系开发数据库模式?

标签 sql database oracle relational-database

我需要实现一个购物车。假设我销售 20 种不同的商品。

我有几个简单的表格:

Cart
-------
tran_id    first_name    last_name    items
1          John          Doe          1:4:15:16


Item
-------
item_id    name         price
1          Ruby         $1.00
2          Diamond      $2.00
...

要点是,我如何查询购物车并以不是 1:4:15:16 格式而是 ruby 、紫 Crystal 、蛋白石、银的顺序显示商品。

最佳答案

您的结构不是一对多或多对多,它只是一对“blob:of:colon:separated:text”。

适当的多对多关系通常使用表来桥接关系。 在您的特定情况下,该表通常是“交易明细”表,而您的“购物车”表是“交易标题”表。

在这种情况下,您将拥有三个表:

CART (transaction header)
---------------
tran_id NUMBER
first_name VARCHAR(100)
last_name VARCHAR(100)

CART_ITEM (transaction detail)
---------------
tran_id NUMBER
item_id NUMBER
.. other details about this line item (quantity, etc)

ITEM
---------------
item_id NUMBER
name  VARCHAR(100)
price  NUMBER(18,4)

然后,要查询它以获得您要查找的内容,只需说:

SELECT h.tran_id, i.name, i.price
  FROM cart h 
INNER JOIN cart_item d ON (h.tran_id = d.tran_id)
INNER JOIN item i ON (d.item_id = i.item_id)
WHERE h.tran_id = 1
ORDER BY i.name

关于sql - 如何为一对多关系开发数据库模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592060/

相关文章:

sql - Sql server中临时表记录限制

sql - 如何将 SQL 查询导出到 SPSS?

mysql - 如何比较行之间的值并找到响应的平均值?

c# - 从 C# 中的 PL/SQL 匿名 block 返回游标

php - 使用带有 N 查询的 "USING"子句 Eloquent 地加入

mysql - sql:按大写过滤字符串结果

mysql - MySQL 中的用户是谁?

database - MS Access 数据 Access 限制

python - 使用 cx_oracle 连接到 Oracle 数据库在 Windows 上出现 DPI-1047

oracle - Oracle中如何检测4字节UTF8字符