There are two main approaches:
(1) use a generic number for all codes, typically generated automatically by an identity column
So, type code = 1 might be 'Issue', = 2 might be 'Research Task', etc.
(2) use an alphanumeric code that's based on the actual value
So, type code = 'I' might be 'Issue', 'R' might be 'Research Task', etc.
Typically (1) is used. (2) is used only if it is already part of normal business activity. For example, you already have 1-3 char CPZ zones, so you would use those zones as they already and not assign a new number.
Say you decide to use numerics for Type:
CREATE TABLE dbo.Type ( type_code smallint NOT NULL IDENTITY(1, 1), type varchar(50) NOT NULL )
INSERT INTO dbo.Type (type ) VALUES('Issue'), ('Research Task')
For a ticket with a type of 'Issue', you would need to INSERT 1 into column Type Code on Ticket.
INSERT INTO Ticket ( ..., [Type Code], ... )
SELECT ..., (SELECT [Type Code] FROM Type WHERE type = 'Issue') AS [Type Code], ...
Relational tables should intentionally be designed this way, with lookup tables rather than hard-coded values in tables. It may seem awkward to you at first, but this is the only proper way to design such tables.
SQL DBA,SQL Server MVP(07, 08, 09) "Money can't buy you happiness." Maybe so, but it can make your unhappiness a LOT more comfortable!