- Backus-Naur Form (BNF)는 컴퓨터 언어의 문법(구문)을 표현하는 표준화된 형식입니다.
- Oracle 문서나 데이터베이스 관련 기술 문서를 읽을 때 종종 사용됩니다.
- BNF는 특정 언어의 문법 규칙을 간결하고 구조화된 방식으로 정의하는 데 사용되며, 데이터베이스 SQL 구문에서도 이를 자주 볼 수 있습니다.
BNF의 기본 개념
- BNF는 문법을 ”생성 규칙(production rules)“ 으로 표현하며, 다음과 같은 구조를 가집니다:
- 비터미널(non-terminal): 다른 규칙으로 대체될 수 있는 요소.
- 터미널(terminal): 더 이상 대체되지 않는 실제 값(문자, 키워드 등).
- 생성 규칙: ::= 기호를 사용해 문법의 정의를 나타냅니다.
- 예:
<statement> ::= <subject> <predicate> <subject> ::= "Oracle" | "SQL" <predicate> ::= "is powerful" | "is flexible"
- 이 규칙은 다음과 같은 문장을 생성할 수 있습니다:
- Oracle is powerful
- SQL is flexible
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> ::= identifierOracle 문서의 BNF 표기법
Oracle 문서에서는 BNF 또는 BNF 유사 표기법을 직관적으로 읽을 수 있도록 다음 기호를 사용합니다: • 대괄호 [ ]: 선택 사항 (옵션)임을 나타냅니다. • 예: [schema.]table → schema는 선택적 요소입니다. • 중괄호 { }: 하나만 선택해야 함을 나타냅니다. • 예: {VARCHAR2 | NUMBER | DATE} → 세 가지 중 하나를 선택. • 수직선 |: 선택지 (or). • 예: {VARCHAR2 | NUMBER} → VARCHAR2 또는 NUMBER 중 하나. • 줄임표 ...: 항목이 반복 가능함을 나타냅니다. • 예: column1 [, column2, ...] → 여러 열을 정의할 수 있음. • 기울임꼴: 사용자가 정의해야 하는 값(식별자, 데이터타입 등). • 예: table, datatype → 사용자가 테이블 이름과 데이터 유형을 지정해야 함.
예제 분석: 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 절도 선택적으로 포함될 수 있음([ ... ]).
BNF 표기법의 장점
• 표준화: 언어 구문을 정확히 기술하는 표준 방식 제공. • 명확성: SQL 명령어를 구조적으로 이해할 수 있음. • 확장성: 복잡한 명령도 계층적으로 나눠 관리할 수 있음.
BNF가 Oracle 문서에서 유용한 이유
• 복잡한 SQL 구문을 간결하게 표현. • 선택 가능한 옵션과 필수 요소를 직관적으로 표시. • 반복 가능 항목(예: 열 정의 등)을 명확히 구분.
BNF의 실용적인 활용
Oracle SQL 구문을 읽을 때 BNF를 활용하려면: 1. 필수와 선택적 요소 구분: • [ ], { }, ... 등의 기호를 주의 깊게 확인. 2. 구성 요소 식별:
• 비터미널(