我在一个数据库(访问文件)中有两个表。
表1 :
| Product Id | Year | Sales |
----------------------------------
| 1144 | 2013 | 100 |
| 20131120 | 2013 | 200 |
| 1144 | 2012 | 333 |
表2 :
| Product Id | Category |
----------------------------------
| 1144 | Car |
| 20131120 | Motorbike |
第一个表(表1)是用户可以随时添加新数据的表,第二个表在新产品ID出现时偶尔更新一次。我想加入这个表,在Product Id的基础上建立某种关系,但由于缺少唯一的主键,我无法使用关系,我是对的吗?当我执行SQL查询(SELECT * FROM Table 1
)时,我希望得到如下结果:
| Product Id | Year | Sales | Category |
-----------------------------------------------
| 1144 | 2013 | 100 | Car |
| 20131120 | 2013 | 200 | Motrobike |
| 1144 | 2012 | 333 | Car |
我知道我可以加入这两个表,但我不希望每次用户向表1添加新数据时都这样做。你知道任何解决方案我该怎么办?
答案 0 :(得分:3)
由于缺乏独特的质量密钥,我无法使用关系, 我是对的吗?
不,这不对,你通常可以JOIN
这两个表。对于具有所谓合格数据类型的任何列,JOIN
两个表或结果集也是合法的。
SELECT
t1.ProductId, t1.year, t1.sales, t2.category
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.productId = t2.productId;
但我不希望每次用户添加新数据时都这样做 表1
您在第二个表格中不需要ProductId
,而是需要CategoryId
,并在第一个表格中添加新列CategoryId
并将其声明为外国键。你的表应该是这样的:
Table1
(产品):
ProductId
,CategoryId
,Year
,Sales
。 Table2
(类别):
CategoryId
,CategoryName
。然后将类别添加到类别表table2
一次,并将产品添加到产品表table1
一次。并为每个产品输入CategoryId
。这就是所谓的normalization
您还应该将table1中的ProductId
和table2中的CategoryID
定义为主键,将第一个表中的CategoryID
定义为外键。