사용자 정의 데이터 형식과 같은 것이 있습니까?


14

MySQL은 커스텀 데이터 타입을 지원합니까? 예를 들어, 우편 번호는 varchar(10)필드에 저장 될 수 있지만 int공백에 대한 옵션과 5 자리 또는 5 + 4 자리 우편 번호인지에 대한 플래그를 사용하여에 압축 될 수 있습니다.

그러한 것들을 위해 완벽한 데이터 유형을 설치하는 방법이 있습니까? 응용 프로그램에 관한 한, 문자열 유형이 될 수 있습니다. 응용 프로그램이 유효하지 않은 데이터를 전달하면 단순히 경고가 있거나없는 데이터 잘림이 발생합니다.

사용자 정의 함수를 사용할 수 있습니다 (예 : INET_ATONIPv4 주소를위한 내장 함수 가 있습니다. 그러나 zip LIKE '12345%'적절하게 색인을 생성해야하는 것은 허용하지 않습니다 . 사용자 정의 데이터 유형을 잘 작성하여 지원하면 데이터 유형을 표시 할 수 있습니다 따라서 정렬 zip int할 때 컴팩트 는 마치 마치 것처럼 정렬됩니다 zip varchar(10).

이렇게하면 열의 너비가 고정 될 수 있으며 6 또는 10 바이트의 가변 저장 영역을 고정 된 너비의 4 바이트로 줄일 수 있습니다.

적용 가능한 몇 가지가 있습니다

  • 우편 번호
  • IPv6 주소
  • 최소 수준의 정밀도와 용량 2038보다 스토리지 사용량이 적은 사용자 정의 타임 스탬프 필드 datetime이지만 구현 연도 이전 날짜를 지원할 필요는 없습니다 (시스템에서 가장 오래된 날짜 인 경우 최소값은 2007 일 수 있음).
  • (이 DST를 구현하는 타임 스탬프 존재하지 않는 것 )
  • 2 바이트 미국 상태는 단일 바이트에 저장 가능
  • long ENUM은 사용자 정의 데이터 유형으로 분리되어 DESCRIBE출력이 모든 줄 바꿈으로 너무 어려워 보이지는 않습니다.

데이터 유형 핸들러는 함수가 저장되는 방식과 유사하게 저장 될 것으로 예상합니다.

데이터베이스 엔진에 이와 같은 것이 원격으로 있습니까? 나는 주로 MySQL을 사용하지만 응용 프로그램을 함수와 같은 함수로 만드는 것이 부족하여 이것이 구현되었는지 궁금 INET_ATON합니다.

MS SQL은 그 특성을 가진 것처럼 보이지만 그것이 단순한 동의어 이상인지 알고 싶습니다. (예를 들어 boolean동의어가 될 수있다 tinyint(1), 또는 postal_code중 하나 char또는 varchar (5또는 9또는 10)) 동의어 내가 여기에 대해 요구하고 있지 않습니다 것을.


mysql에 대한 간단한 답변 afaik : 아니오. 다른 RDBMS가 이러한 것들을 어떻게 처리하는지 보는 것은 흥미로울 것입니다
Derek Downey

@DTest : SQL Server에 CREATE TYPE이 있습니다. CLR 유형에 유용합니다. msdn.microsoft.com/ko-kr/library/ms175007(SQL.90).aspx
gbn

1
@George Bailey : SQL Server 링크가 오래되었습니다 : SQL Server 2000 용입니다. MySQL의 경우 stackoverflow.com/q/2451435/27535
gbn

@gbn (첫번째 코멘트로 응답)은 예를 들어 변환됩니다 입력 번역 포함되어 IPv6binary(16), 또는 (에 사용할 수있는이 앨리어싱으로 제한됩니다 state의가되고 enumS)
브라이언 필드

1
int로서 지퍼 코드를 저장 양해하여 주시기 바랍니다 int없는 캐나다, 예를 들어, 'A9A A9A'의 형식을 사용 - 국제화 된 데이터베이스에 대한 작업. 우편 번호에 대한 사용자 정의 데이터 유형을 작성하는 것이 좋습니다. 그러나 일부를 처리 할 계획을 재검토하고 싶을 수도 있습니다 (예 : 1 바이트 필드에 상태를 저장하면 잠재적 인 '기타'문제가 있음). 제공된 데이터 유형이 일반적으로 부족하지 않으면 (크기는 중요하지 않음) 날짜 / 시간 데이터 유형을 다시 구현하지 마십시오. 사람들을 혼란스럽게 할뿐입니다.
Clockwork-Muse

답변:


14

MySQL은 커스텀 데이터 타입을 지원합니까?

간단한 답변 : 아니오

데이터베이스 엔진에 이와 같은 것이 원격으로 있습니까? 나는 주로 MySQL을 사용하지만 응용 프로그램을 INET_ATON 함수와 같은 함수로 호출하는 것이 부족하여 이것이 구현되었는지 궁금합니다.

오라클은 CREATE TYPE멤버 함수 및 상속 과 같은 기능을 포함하여 어느 정도 OO 클래스와 유사합니다.

Postgres는 CREATE TYPEOO 클래스와 비슷하지만 멤버 함수 또는 상속은 없지만 매우 유연하고 유용하며 새로운 기본 유형을 만들 수도 있습니다. 또한이 CREATE DOMAIN상속 또는 하위 입력의 형태를 허용하고 기본적으로 몇 가지 제약 조건을 기본 형식을 확장한다. Postgres에는 기본적으로 inet기하 유형 과 같은 몇 가지 흥미로운 기본 유형이 있습니다. Postgres에서이 예제에서 base36 data type 을 사용하여 사용자 정의 데이터 유형에 대한 확장을 C로 작성할 수 있습니다 .

SQL Server에는 CREATE TYPE기존 시스템 데이터 형식을 기반으로 사용자 지정 데이터 형식을 만들 수 있습니다. 예를 들어 SSN기본적으로로 정의 된 유형을 만들 수 VARCHAR(11)있지만이 방법으로 필드의 크기를 기억할 필요는 없습니다.


1
우리가 결정적인 참조를 얻을 수 있도록이 답변을 정리하고 편집하십시오. 나는 질문 CW 응답라는 것으로 느꼈다 ...
잭은 말한다 topanswers.xyz 시도

0

Firebird 는 또한 도메인 을 통해 솔루션을 제공 합니다 .

Firebird에서 "사용자 정의 데이터 형식"이라는 개념은 도메인의 형태로 구현됩니다. 물론 도메인을 생성한다고해서 새로운 데이터 유형이 생성되는 것은 아닙니다. 도메인은 기존 데이터 유형을 일련의 속성으로 캡슐화하고이 "캡슐"을 전체 데이터베이스에서 여러 번 사용할 수 있도록하는 수단을 제공합니다. 여러 테이블에 동일하거나 거의 동일한 속성으로 정의 된 열이 필요한 경우 도메인이 적합합니다.

도메인 사용은 테이블 및 뷰의 열 정의로 제한되지 않습니다. 도메인을 사용하여 PSQL 코드에서 입력 및 출력 매개 변수 및 변수를 선언 할 수 있습니다.


Firebird MySQL입니까?
Anthony Genovese

아니요, Firebird는 Firebird입니다.) 방금 그런 기능을 가진 RDMS라고 언급했습니다.
Tibor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.