i think you are under the assumption that a table has to have a numeric id -- this is not the case
i would still create a table of valid statuses --
CREATE TABLE payment_statuses
( payment_status VARCHAR(37) NOT NUYLL PRIMARY KEY
INSERT INTO payment_statuses
VALUES ( 'pending' ),( ' completed' );
but then to update a payment, i would use the status like this --
SET payment_status = 'completed'
WHERE orderno = 937
this way, there is no extra join required to retrieve payments by status --
SELECT * FROM payments
WHERE payment_status = 'pending'
and yet the relational integrity of the foreign key is still enforced