使用代理键时插入表

w80xi6nr  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(250)

我有两张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 .
你知道如何有效地完成这个任务吗?
或者我应该放弃代理密钥而完全使用自然密钥?
谢谢

i1icjdpr

i1icjdpr1#

如果你想插入一个新产品,但你只知道 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 ). 如果可能,最好直接使用主键。

相关问题