我有两张table:
表1是: product_id (INT 11)
-主键,自动递增 category (INT 11)
-索引,fk到
Table2.category_id product (VARCHAR 255)
表2为: category_id (INT11)
-主键,自动递增 category_name (VARCHAR 255)
现在,在表1中添加新产品时,我需要 INSERT
类别和产品。但是,category是一个代理键,它与 Table2.category_id
列(每个类别都有一个列),这意味着当我插入时,我并不真正知道 category_id
,只是 category_name
.
你知道如何有效地完成这个任务吗?
或者我应该放弃代理密钥而完全使用自然密钥?
谢谢
1条答案
按热度按时间i1icjdpr1#
如果你想插入一个新产品,但你只知道
category_name
,但不是category_id
,然后我们试着INSERT INTO ... SELECT
:这对我来说是个糟糕的设计,有很多原因。首先,假设您的应用程序(例如php)将处理
category_id
在引擎盖下,而不是引擎盖下category_name
. 因此,理想情况下,您不必查询table2
使此插入生效。这里的另一个问题是,两个或多个类别可能恰好具有相同的名称(但名称不同)category_id
). 如果可能,最好直接使用主键。