我有两个表:
表1为:
product_id (INT 11)
-PK,自动递增category (INT 11)
-索引,FK到Table2.category_id
product (VARCHAR 255)
表2为:
category_id (INT11)
-PK,自动递增category_name (VARCHAR 255)
现在,将新产品添加到表1时,我需要同时INSERT
类别和产品。但是,category是一个代理键,与Table2.category_id
列相关(每个类别都有一个列),这意味着在我插入时,我并不真正知道category_id
,而只是{{ 1}}。
关于如何有效地进行这项工作的任何想法?
还是我应该放弃代理密钥并继续使用自然密钥?
谢谢
答案 0 :(得分:1)
如果您要插入新产品,但只知道category_name
,但不知道category_id
,那么我们尝试执行INSERT INTO ... SELECT
:
INSERT INTO table1 (category, product)
SELECT category_id, 'new product'
FROM table2
WHERE category_name = 'some category';
出于多种原因,这对我来说感觉是不好的设计。首先,假设您的应用程序(例如PHP)在后台处理category_id
,而不是category_name
。因此,理想情况下,您不必查询table2
即可使此插入工作。这里的另一个问题是,两个或多个类别可能碰巧具有相同的名称(但不同的category_id
)。如果可能,最好直接使用主键。