반응형
MySQL 열거형 데이터 유형과 동일한 SQL Server?
SQL Server 2008에는 MySQL과 같은 데이터 타입이 있습니까?enum
?
그렇지 않아요.애매한 등가물이 있습니다.
mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
여기서 찾은 가장 좋은 해결책은 가능한 값을 프라이머리 키로 하여 룩업 테이블을 만들고 룩업 테이블에 대한 외부 키를 작성하는 것입니다.
IMHO 룩업테이블은 참조 무결성을 갖춘 방법입니다.단, 다음과 같은 예에 따라 "Evil Magic Numbers"를 회피하는 경우에만 해당됩니다.T4를 사용하여 데이터베이스 룩업테이블에서 열거형 생성
재미있게 보내!
CREATE FUNCTION ActionState_Preassigned()
RETURNS tinyint
AS
BEGIN
RETURN 0
END
GO
CREATE FUNCTION ActionState_Unassigned()
RETURNS tinyint
AS
BEGIN
RETURN 1
END
-- etc...
퍼포먼스가 중요한 경우에도 하드한 값을 사용합니다.
아마도 이를 위한 가장 좋은 솔루션은 단순한 룩업 테이블(룩업 테이블이란?)일 것입니다.다만, 다음과 같은 것을 실장할 수 있습니다.
솔루션
SQL Server Management Studio (SSMS)
User.Role
[외부 키]가 여기에 있고Role.Type
는 참조하는 프라이머리 키입니다.이 표에는 다음과 같은 값이 표시됩니다.
- 두 테이블에서 일치해야 하는 유형입니다.이 경우 그 유형은 다음과 같습니다.
nvarchar(15)
- 에 값을 추가하려고 하면
User.Role
에서 구할 수 있는 것과 다르다Role
표, 에러가 표시됩니다.
SQL 코드
CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](50) NOT NULL,
[Email] [nvarchar](75) NOT NULL,
[Password] [nvarchar](25) NOT NULL,
[Role] [nvarchar](15) NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[User] WITH CHECK ADD CONSTRAINT [FK_User_Role] FOREIGN KEY([Role])
REFERENCES [dbo].[Role] ([Type])
GO
ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Role]
GO
CREATE TABLE [dbo].[Role](
[Type] [nvarchar](15) NOT NULL,
CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED
(
[Type] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
솔루션 2
다음과 같은 룩업 테이블을 구현할 수 있습니다. SQL Server에서 열거형 생성
이런 걸 해볼 수 있어요.
ALTER TABLE dbo.yourTable
ADD CONSTRAINT yourColumn CHECK(yourColumn IN('XL','L','M','S','XS'))
언급URL : https://stackoverflow.com/questions/1434298/sql-server-equivalent-to-mysql-enum-data-type
반응형
'itsource' 카테고리의 다른 글
INSERT 문이 외부 키 제약 조건과 충돌합니다(SQL Server). (0) | 2023.04.07 |
---|---|
SQL-Server에서 테이블 변수를 드롭하려면 어떻게 해야 합니까?이래도 되나? (0) | 2023.04.07 |
NULL의 <>!= 연산자가 동일하지 않습니다. (0) | 2023.04.07 |
생년월일과 getDate()를 기준으로 나이(년)를 계산하는 방법 (0) | 2023.04.07 |
현재 데이터베이스 백업이 없으므로 백업 로그를 수행할 수 없습니다. (0) | 2023.04.07 |