Ограничение CHECK - это мой путь.Другой подход заключается в использовании ссылочных ограничений, первичных и внешних ключей AKA.Если «доступно» и «недоступно» используется в нескольких местах, это будет лучше, чем ограничение CHECK, поскольку вы можете применять одинаковые правила для нескольких таблиц.Таким образом, вы можете обеспечить согласованность и избежать появления некоторых таблиц с другими значениями, такими как «доступно» и «недоступно».
-- Lookup table for all possible "Availability" values
CREATE TABLE dbo.LU_Availability
(
AvailabilityPK VARCHAR(14) NOT NULL,
CONSTRAINT pk_LU_Availability PRIMARY KEY CLUSTERED(AvailabilityPK)
);
INSERT dbo.LU_Availability (AvailabilityPK) VALUES ('Available'),('Not Available');
-- Table with the allowable values enforced via foriegn key constraint
CREATE TABLE dbo.YourTable
(
someId INT IDENTITY,
someValue CHAR(10),
[Availability] VARCHAR(14) NOT NULL,
CONSTRAINT fk_AvailabilityTxt FOREIGN KEY([Availability])
REFERENCES dbo.LU_Availability(AvailabilityPK)
);
INSERT dbo.YourTable ([Availability]) VALUES ('Available'); -- Succeeds
INSERT dbo.YourTable ([Availability]) VALUES ('NOT Available'); -- Succeeds
INSERT dbo.YourTable ([Availability]) VALUES ('Perhaps'); -- Fails
И наконец - важно понимать, что, хотя ограничения (CHECK, PK, FK,UNIQUE) немного замедлит работу, триггеры - убийцы производительности.Вот почему опытные разработчики и администраторы баз данных предлагают избегать их, когда ограничение сработает.