- BNF는 문법을 ”생성 규칙(production rules)“ 으로 표현하며, 다음과 같은 구조를 가집니다:
- 비터미널(non-terminal): 다른 규칙으로 대체될 수 있는 요소.
- 터미널(terminal): 더 이상 대체되지 않는 실제 값(문자, 키워드 등).
- 생성 규칙: ::= 기호를 사용해 문법의 정의를 나타냅니다.
<statement> ::= <subject> <predicate>
<subject> ::= "Oracle" | "SQL"
<predicate> ::= "is powerful" | "is flexible"
- 이 규칙은 다음과 같은 문장을 생성할 수 있습니다:
- Oracle is powerful
- SQL is flexible
2. Oracle SQL 구문에서의 BNF
Oracle 문서에서 BNF는 SQL 명령의 구문을 설명하는 데 사용됩니다. Oracle BNF 표기법은 대체로 BNF에서 파생된 EBNF(Extended Backus-Naur Form) 형식을 따르며, 약간의 확장을 포함합니다.
예: CREATE TABLE 구문 (Oracle Syntax)
Oracle 문서에서 다음과 같은 구문 정의를 볼 수 있습니다:
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr] [constraint] [, ...])
이를 BNF로 표현하면:
<create_table> ::= CREATE TABLE [ <schema>. ]
( <column> <datatype> [ DEFAULT <expr> ] [ <constraint> ] [, ...] )
<schema> ::= identifier
::= identifier
<column> ::= identifier
<datatype> ::= VARCHAR2 | NUMBER | DATE | ...
<constraint> ::= PRIMARY KEY | UNIQUE | ...
3. Oracle 문서의 BNF 표기법
Oracle 문서에서는 BNF 또는 BNF 유사 표기법을 직관적으로 읽을 수 있도록 다음 기호를 사용합니다:
• 대괄호 [ ]: 선택 사항 (옵션)임을 나타냅니다.
• 예: [schema.]table → schema는 선택적 요소입니다.
• 중괄호 { }: 하나만 선택해야 함을 나타냅니다.
• 예: {VARCHAR2 | NUMBER | DATE} → 세 가지 중 하나를 선택.
• 수직선 |: 선택지 (or).
• 예: {VARCHAR2 | NUMBER} → VARCHAR2 또는 NUMBER 중 하나.
• 줄임표 ...: 항목이 반복 가능함을 나타냅니다.
• 예: column1 [, column2, ...] → 여러 열을 정의할 수 있음.
• 기울임꼴: 사용자가 정의해야 하는 값(식별자, 데이터타입 등).
• 예: table, datatype → 사용자가 테이블 이름과 데이터 유형을 지정해야 함.
4. 예제 분석: CREATE INDEX
다음은 Oracle 문서에서 BNF 형식으로 표현된 CREATE INDEX 구문입니다:
CREATE [ UNIQUE ] INDEX index_name ON table_name ( column1 [, column2, ...] )
[ TABLESPACE tablespace_name ]
[ STORAGE ( storage_clause ) ]
BNF로 변환:
<create_index> ::= CREATE [ UNIQUE ] INDEX <index_name>
ON <table_name> ( <column> [, <column>, ...] )
[ TABLESPACE <tablespace_name> ]
[ STORAGE ( <storage_clause> ) ]
<index_name> ::= identifier
<table_name> ::= identifier
<column> ::= identifier
<tablespace_name> ::= identifier
<storage_clause> ::= { STORAGE_SETTINGS }
• 설명:
1. UNIQUE는 선택 사항임([ UNIQUE ]).
2. 인덱스 이름, 테이블 이름, 열 이름 등은 사용자가 정의해야 함(기울임꼴).
3. TABLESPACE 및 STORAGE 절도 선택적으로 포함될 수 있음([ ... ]).
5. BNF 표기법의 장점
• 표준화: 언어 구문을 정확히 기술하는 표준 방식 제공.
• 명확성: SQL 명령어를 구조적으로 이해할 수 있음.
• 확장성: 복잡한 명령도 계층적으로 나눠 관리할 수 있음.
6. BNF가 Oracle 문서에서 유용한 이유
• 복잡한 SQL 구문을 간결하게 표현.
• 선택 가능한 옵션과 필수 요소를 직관적으로 표시.
• 반복 가능 항목(예: 열 정의 등)을 명확히 구분.
7. BNF의 실용적인 활용
Oracle SQL 구문을 읽을 때 BNF를 활용하려면:
1. 필수와 선택적 요소 구분:
• [ ], { }, ... 등의 기호를 주의 깊게 확인.
2. 구성 요소 식별:
• 비터미널(, <column> 등)과 터미널 키워드(CREATE, TABLE 등)를 구분.
3. 구문 확장 및 옵션 이해:
• 선택적 요소([ ])를 포함하거나 생략할 경우를 고려해 구문 이해.
요약
Backus-Naur Form (BNF)은 언어의 구문을 간결하고 구조적으로 표현하는 방법입니다. Oracle 문서에서 SQL 구문을 이해할 때 BNF 방식은 선택적 요소, 반복 가능 항목, 필수 키워드를 명확히 구분할 수 있도록 도와줍니다. 이를 통해 복잡한 SQL 명령을 더 쉽게 이해하고 작성할 수 있습니다.