我正在构建一个类似于here的数据库,其中我有不同类型的产品,每种类型都有其自己的属性。从子类中选择产品:我需要多少个查询?
我报告一个短版为了方便
product_type
============
product_type_id INT
product_type_name VARCHAR
product
=======
product_id INT
product_name VARCHAR
product_type_id INT -> Foreign key to product_type.product_type_id
... (common attributes to all product)
magazine
========
magazine_id INT
title VARCHAR
product_id INT -> Foreign key to product.product_id
... (magazine-specific attributes)
web_site
========
web_site_id INT
name VARCHAR
product_id INT -> Foreign key to product.product_id
... (web-site specific attributes)
这样,我并不需要作出巨大的表,针对不同类型产品的每个属性的列(其中大部分,然后将NULL)
我如何SELECT
一个产品product.product_id
并查看其所有属性? 我是否必须首先进行查询以了解我正在处理的产品类型,然后通过某种逻辑对另一个查询JOIN
正确的表格进行查询?或者有没有办法将所有的东西结合在一起? (如果当我检索有关product_id的信息时有很多NULL,那么在这一点上就没问题了)。
谢谢
另外,使用w。*和m。*将重新包含您可能已包含的公共列。 – BradC 2010-05-20 16:58:18
谢谢!有用。 我对SQL很新,我对LEFT JOIN的存在感到困惑。现在我明白了! 然而正确的方式大概是这样的: LEFT JOIN杂志M于m.product_id = p.product_id LEFT JOIN WEB_SITE W于w.product_id = p.product_id 由于PRODUCT_ID在产品表独特的,他们也在所有子表中都是唯一的,所以不需要magazine_id或web_site_id。 同样,我没有看到product_type表的需要。我可以在产品表中添加一个属性 – Stefano 2010-05-21 09:19:55
@Stefano:1)我加入了'product_type',因为它在那里。 2)关于连接你是正确的,我使用了错误的列名。现在已经纠正了。 3)为什么你有*两个*属性来唯一标识一个杂志(显然是'magazine_id'和'product_id')?这种设置对我来说毫无意义。 'product_id'在不同产品类型中是唯一的,所以在每种产品类型中都不需要另一个唯一的ID。 – Tomalak 2010-05-21 12:06:49