I have a mapping table that maps an int to a string for example
I have another table that references this one with a foreign key relationship
create table products ( product_name varchar (50), color_id int, constraint fk_products foreign key (color_id) references colors (color_id) );
My question is the best way to get the color_id from the colors table when I am updating the products table – for example if I get a new product that is “red” and I want to enter that product into the product table with the color_id of 1.
The two ideas I have thought of are to
- do a select from the colors table to get the color_id for the color “red”. But I don’t like the idea of needing to run a select every time I update the products table
- hardcode the values in my code for the colors, but that seems very annoying from a maintenance perspective, because I would need to update the code every time a new color is added.
I am using postgres
Advertisement
Answer
You should look up the values. This is pretty easy in an insert. Something like:
insert into products p select v.name, c.color_id from (values ('name1', 'red'), ('name2, 'blue')) v(name, color) join colors c on c.color = v.color;
If you are concerned about performance, just be sure you have an index on colors(color)
.