2

我有这个示例表:

table ORDERS

client   orderno   cant1   code1   notes1   cant2   code2   notes2   cant[i]   code[i] [...]
--------------------------------------------------------------------------------------
1          1        3      AA01    Test      4      BB01    Testing
2          2        10     XX05    Test      



table PRODUCTS

code   prod    price
---------------------
AA01   Engine   100  
BB01   Wheel     50  



table CLIENTS

client   name      address     telephone
-----------------------------------------
  1     Maxwell   24 1st st    0987654321
  2     Hammer    77 main st   1234567890

我需要将它们关联起来以获取每个产品线的数量、产品名称和价格(它们是 30 cant[i]、code[i] 和 notes[i])以及客户的信息(姓名、地址、 ETC)

我发现了这种情况,但我不明白如何将其应用于我的:SQL query two tables with relationship one-to-many

我希望它不会太复杂。

提前致谢!

编辑

感谢 ElectricLlama,我意识到这里的问题是存储订单的表。根据他的回答,数据库的规范化将改善我获取信息的方式。

对于任何对此解决方案感兴趣的人,我发现了这个很棒的网站: http: //www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/

这个SO答案清除了一切!超级清晰易懂! https://stackoverflow.com/a/1258776/888292

4

3 回答 3

2

查看链接中的内容-是的,这似乎是很多废话,但这可能是获得所需内容的唯一方法。

问题是您的表格没有标准化。具体来说,您不应该有名为 code1 code2 code3 code4... code30 的字段

这种设计有很多缺陷,包括当客户有 31 种产品时会发生什么?

在规范化数据库中,您将有一个包含一组斜面、代码和注释的表,并且每个产品将有一行。

但我猜你无法正常化它。

很好地提出了您自己的答案,而且您现在还亲身体验了不规范化数据库的影响。

可能要考虑的是创建一个视图,为您规范化它。它将介绍性能问题,但它会向您介绍视图,并让您有机会了解解决方案在规范化表中的样子。

于 2012-11-06T04:05:00.623 回答
0

同上@ElectricLlama & 这里有一些链接可以帮助你学习 SQL:

于 2012-11-06T04:26:18.750 回答
0

我认为你的桌子应该看起来像

表订单

-------------

orderno
客户
代码
无法
注释

这里make orderno,client和code做一个表的复合主键

于 2012-11-06T13:05:44.903 回答