(Oracle DB) - 14. Self Check 2

kynoh·2023년 3월 2일
0

Oracle Database

목록 보기
18/30
/* Self_Check_2_1 */
CREATE TABLE sc_2_1_orders
(
	order_id NUMBER(12, 0),
	order_date DATE,
	order_mode VARCHAR2(8 BYTE),
	customer_id NUMBER(6, 0),
	order_status NUMBER(2, 0),
	order_total NUMBER(8, 2) DEFAULT 0,
	sales_rep_id NUMBER(6, 0),
	promotion_id NUMBER(6, 0),
	CONSTRAINT PK_ORDER_ID PRIMARY KEY
		(order_id),
	CONSTRAINT CK_ORDER_MODE CHECK
		(order_mode IN ('direct', 'online'))
);

/* Self_Check_2_2 */
CREATE TABLE sc_2_2_order_items
(
	order_id NUMBER(12, 0),
	line_item_id NUMBER(3, 0),
	product_id NUMBER(3, 0),
	unit_price NUMBER(8, 2) DEFAULT 0,
	quantity NUMBER(8, 0) DEFAULT 0,
	CONSTRAINT PK_OI_LID PRIMARY KEY(order_id, line_item_id)
);

/* Self_Check_2_3 */
CREATE TABLE sc_2_3_promotions
(
	promo_id NUMBER(6, 0),
	promo_name VARCHAR2(20),
	CONSTRAINT PK_PROMO_ID PRIMARY KEY(promo_id)
);

/* Self_Check_2_4 */
	/*
	Q. FLOAT type을 지정할 때, FLOAT(126) 이처럼 precision을 지정할 수 있다.
	이 수는, binary digit을 의미한다.
	FLOAT(126)의 Decimal digit은, 126 * 0.30103의 연산 결과, 37.92978이 된다.
	즉 NUMBER type의 digit이 38인 data와 같은 length의 digit을 가지는 것이다.
	왜 0.30103을 곱하는 것인가?
	
	A.
	#	FLOAT precision의 범위는 1 ~ 128이다.
		왜냐하면, 4-byte single precision을 갖기 때문이다.
		즉 유효숫자는 7 bits이고, 이 유효숫자 범위 내에서
		'p'로 표현가능한 수의 범위는 1 ~ 128 (128개)이다.
		MSB는 부호를 의미하는 bit이고, 나머지 23 bits는 
		fraction을 표현하기 위한 부분이다.
	#	Bias notation을 사용하여 single precision에 대응하는 bias 127을 사용한다.
		최대 표현 가능한 숫자는 2^(exponent - 1)이므로,
		이를 scientific notation으로 표현하면, 1.xxx * 10^38이 된다.
		그러므로 FLOAT이 NUMBER의 sub data type이라고 말한다.
	#	0.30103을 곱하는 이유는 이 single precision의
		최대 표현 가능한 decimal digit을 구하기 위해서다.
	*/


/* Self_Check_2_5 */
CREATE SEQUENCE sc_2_5_orders_seq
	INCREMENT BY 1
	START WITH 1000
	MINVALUE 1
	MAXVALUE 99999999
;
profile
On-orbit

0개의 댓글

관련 채용 정보