Если эти статусы вряд ли будут расширены в будущем и будут использоваться только этой таблицей, вы можете сохранить определение в одной таблице.
Если вы это сделали, вы можете захотетьсоздать свою таблицу с чем-то вроде следующего:
CREATE TABLE T (
/* Various columns */
Status tinyint not null,
constraint T_Status_Valid CHECK (Status between 0 and 3),
StatusText as CASE Status
when 0 THEN 'Reserved'
when 1 THEN 'Check In'
when 2 THEN 'Check Out'
when 3 THEN 'Cancelled'
END
)
Это избавляет от необходимости создавать любые другие объекты в базе данных, в то же время автоматически предоставляя текст (если требуется) и избегая недопустимых значений состояния.
Если, OTOH, вы ожидаете, что диапазон статусов изменится в будущем, или вам нужно использовать статусы в нескольких таблицах, или просто почувствуете, что вышеупомянутое "грязно" (мнения могут отличаться здесь), тогда создайте отдельную таблицуи используйте внешний ключ.