我有这个示例表:
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])和客户的信息(名称) ,地址等)
我发现了这个案例,但我不明白如何将它应用于我的:SQL query two tables with relation one-to-many
我希望它不会太复杂。
提前致谢!
感谢ElectricLlama,我意识到这里的问题是存储订单的表。根据他的回答,数据库的规范化将改善我获取信息的方式。
对于对此解决方案感兴趣的任何人,我找到了这个很棒的网站:http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/
这个SO答案清除了所有!超级清晰易懂! https://stackoverflow.com/a/1258776/888292
答案 0 :(得分:2)
看看你链接中的内容 - 是的,这看起来像很多废话,但它可能是获得你想要的唯一方法。
问题是您的表未规范化。具体来说,你不应该有名为code1 code2 code3 code4 ... code30
的字段这种设计存在许多缺陷,包括当客户有31种产品时会发生什么?
在规范化的数据库中,您将拥有一个包含一组cant,code和notes的表,并且每个产品只有一行。
但我猜你无法正常化它。
为了提出自己的答案做得非常好,现在您还可以亲身体验不规范化数据库的影响。
可能想要考虑的是创建一个视图,为您规范化。它将介绍性能问题,但它将为您提供视图介绍,并让您有机会了解解决方案对规范化表的影响。
答案 1 :(得分:0)
Ditto @ElectricLlama&这里有一些链接可以帮助你学习SQL:
答案 2 :(得分:0)
我认为你的表应该看起来像
表格订单
-------------
orderno
客户
代码
着
注
这里使orderno,client和code成为表的复合主键