使用什么数据库模型?

时间:2010-11-19 13:30:56

标签: mysql database rdbms

我需要一个包含以下数据的数据库:

Product | Discounter | Price
---------------------------------------------------------
Onion   |   a   |   99.99
  | b  | 1.07
  | c | 750.00
Garlic  |   a   |   0.39
  | b | 17.56
  | c | 3.59

我想使用MySQL,但我怎样才能扩展"产品" " Discounter"?

中每一行的单元格

提前致谢, 未知

3 个答案:

答案 0 :(得分:3)

使用两张桌子。您的表可能如下所示(在伪DDL中)

Product
   product_id int,
   product_name varchar(20),
   constraint pk_product primary key (product_id)

ProductDiscounter
   product_id int,
   discounter char(1),
   price decimal,
   constraint pk_product_discounter primary key (product_id, discounter),
   constraint fk_product_discounter foreign key (product_id) references (Product.product_id)

要选择ID为1的产品的不同价格,您可以执行以下select语句:

select p.product_name, pd.discounter, pd.price 
from Product p, ProductDiscounter pd
where p.product_id = pd.product_id 
and p.product_id = 1

答案 1 :(得分:0)

一列中的单元格不能跨越多行。

Klaus的答案非常笼统(并支持从产品ID中删除各种其他数据),所以如果您的问题真的很复杂,我会继续这样做。但是,如果案例与问题中描述的一样简单,则可以将产品名称放在每一行中。 SELECT * WHERE Product ==任何在这种表格上都可以正常工作的东西。

答案 2 :(得分:0)

在以Klaus指定的方式对表格进行结构化/规范化之后,我还建议使用非常有用的组函数。这有什么好处的是你实际上可以让db计算统计数据,如折扣商之间的平均价格,每个产品。我还要指出,您可以按产品名称对最终结果进行排序(即使在分组后),以便在显示时保持界面友好。

SELECT p.product_name, pd.discounter, Avg(pd.price) as `Average Discounter Price`
FROM Product p
LEFT JOIN ProductDiscounter pd ON p.product_id = pd.product_id
GROUP BY p.product_id
ORDER BY p.product_name