코딩일지

[코딩일지] 231020

SolationCoding 2023. 10. 20. 18:29

테이블 자기자신 참조


자기자신을 참조하는 경우가 궁금해서 찾아봤더니 잘 정리해주신 글이 있었다.

요약

자기자신 참조 가능하고, 관계 테이블을 통해 다대다 관계도 설명이 가능하다.


도움받은 링크

https://needjarvis.tistory.com/498

자기참조관계, 순환관계(Recursive Relationship)

순환관계, 자기참조관계의 개념가. 순환관계(Recursive Relationship)의 정의- 하나의 엔터티(Entity)가 다른 엔터티가 아닌 자기 자신과 관계를 맺는 타입으로 순환관계 혹은 자기참조관계라 불린다.-

needjarvis.tistory.com


INTEGER 와 NUMBER

숫자를 사용할 때 무엇을 해야 하나 찾아보았다.
인티저는 정수 넘버는 소수점까지 가능하다고 한다.
오라클에서는 내부적으로 NUMBER로 변환한다고 한다.

읽어 보니 그래도 정수를 사용하는 곳은 INTEGER 사용하는 게 좋은 것 같다. 금액이라던지, 회수라던지, 나눠지면 안 되는 숫자들이 INTEGER 써야 하는 게 아닐까


도움받은 링크

https://ssollacc.tistory.com/17

[Oracle] 오라클에서 데이터 타입 number VS integer VS int 차이

문득 테이블 생성시 데이터 타입을 생각하다가 number 와 integer, int 의 차이가 궁금해졌다. 여러 사이트를 뒤져본 결과... BINARY_INTEGER = -2147483647에서 2147483647 사이의 정수 NUMBER[(P, S)] = 고정 및 부동

ssollacc.tistory.com


오라클 자동 값 증가

오라클 시퀀스를 쓰지 않고도 자동으로 값 증가하는 방법이 있다고 해서 신나서 찾아보았다.
궁금하던 ID값이 뭔지 이제 알게 되었는데
이게 값을 순환해주는 녀석이었다.

작업하다가 오라클 버전을 확인해봐야겠단 생각이 들어서 확인해 보았다.
아쉽게도 내 오라클 버전은 11c 여서 해당 기능을 사용할 수 없다.

cmd에서 확인


cmd에서 sqlplus 입력

쿼리문으로 확인

select * from v$version;

도움받은 링크

오라클 버전 확인

https://andalmog.tistory.com/5

[oracle] 오라클 버전 확인하는 방법 : cmd / query

1. cmd에서 확인 2. 버전 확인 query문 1. cmd에서 버전 확인 → sqlplus 명령어 입력 user-name 입력하는 부분에서 벗어나려면 ctrl + c 입력하면 됩니다. 2. query문으로 버전 확인 → select * from v$version; posting

andalmog.tistory.com


오라클 자동증가 컬럼

https://kimvampa.tistory.com/146

자동값 증가(Oracle, MySQL)(IDENTITY, AUTO_INCREMENT)

순서 1. Oracle 1.1 IDENTITY 1.1.1 실습 1.1.2 IDENTITY 초기화 2. MySQL 2.1 AUTO_INCREMENT 2.1.1 실습 2.1.2 AUTO_INCREMENT 초기화 1. Oracle 1.1 IDENTITY 사용 기존 Oracle DB에서 자동 증가를 구현하기 위해서는 시퀀스(SEQUENCE),

kimvampa.tistory.com


내기 테이블 생성


회사에서 점심먹은 뒤 커피 내기를 하고 있는데
관련 정보를 테이블로 만들어서 저장하면 좋겠다는 생각이 들었다.
EXERD에도 DDL로 내보내는 기능이 있고 인텔리제이에서도 DDL로 들어가면 테이블 생성하는 기능이 있다.
두 개 간에 안 맞는 부분이 있긴 한데 자주 쓰는 쪽을 조정해주면 될 듯 하다.


EXERD 내보내기

-- 내기
CREATE TABLE "TB_MOMEY_BET" (
		"BET_NO" INTEGER NOT NULL,
		"BET_DATE" DATE NOT NULL,
		"ST_WIN_LOS" CHAR(1) DEFAULT 'W',
		"BET_AMOUNT" INTEGER NOT NULL,
		"BET_ITEM" VARCHAR2(100) DEFAULT '커',
		"GROUP_NM" VARCHAR2(100) DEFAULT 'WIIN',
		"BET_LOOSER" VARCHAR2(100) NOT NULL,
		"STORE_NM" VARCHAR2(100) NULL
);

-- 내기
ALTER TABLE "TB_MOMEY_BET"
	ADD CONSTRAINT "PK_TB_MOMEY_BET" -- 내기 기본키
	PRIMARY KEY (
		"BET_NO" -- 내기 번호
	);

인텔리제이 DDL


-- auto-generated definition
create table TB_MOMEY_BET
(
    BET_NO      NUMBER                          not null
        constraint "TB_MONEY_BET_pk"
            primary key,
    BET_DATE    DATE                            not null,
    ST_WIN_LOSE CHAR          default 'W'       not null
        constraint CK_TB_MONEY_BRY_ST_WIN_LOSE
            check (ST_WIN_LOSE = 'W' OR ST_WIN_LOSE = 'L'),
    BET_AMOUNT  NUMBER        default 0         not null,
    BET_ITEM    VARCHAR2(100) default '커피'      not null,
    GROUP_NM    VARCHAR2(100) default 'WIIN'    not null,
    BET_LOOSER  VARCHAR2(100) default 'SOMEONE' not null,
    STORE_NM    VARCHAR2(100)
)
/

comment on table TB_MOMEY_BET is '내기'
/

comment on column TB_MOMEY_BET.BET_NO is '내기 번호'
/

comment on column TB_MOMEY_BET.BET_DATE is '내기한 날'
/

comment on column TB_MOMEY_BET.ST_WIN_LOSE is '승패 WIN : W LOSE : L'
/

comment on column TB_MOMEY_BET.BET_AMOUNT is '내기 금액(내 몫)'
/

comment on column TB_MOMEY_BET.BET_ITEM is '내기 대상, 품목, 상품'
/

comment on column TB_MOMEY_BET.GROUP_NM is '그룹명'
/

comment on column TB_MOMEY_BET.STORE_NM is '가게 이름'
/

호의 테이블 정의


늘 까먹곤 하는 크고 작은 은혜들을 정리하면 좋겠다는 생각을 했다.
작게는 커피부터 식사까지, 갚아야 하는 은혜인지, 금액대는 얼마인지 무얼 받았는지 언제 받았는지
휘발성의 내 머리는 잊겠지만 데이터베이스는 잊지 않으니까
이정도면 잘 정의된 것 같다. 수정하게 된다면 나중에 또 추가해 보겠다.

exerd ddl


-- 호의
CREATE TABLE "TB_MONEY_FAVOR" (
		"FAVOR_NO" INTEGER NOT NULL,
		"RECEIVED_DATE" DATE NOT NULL,
		"RECEIVED_FAVOR" VARCHAR2(100) NOT NULL,
		"PERSON" VARCHAR2(100) NOT NULL,
		"PRC_RANGE" INTEGER NULL,
		"GIVE_BACK_YN" CHAR(1) DEFAULT 'N',
		"NOTE" VARCHAR2(300) NULL,
		"WEIGHT" INTEGER NOT NULL
);

-- 호의
ALTER TABLE "TB_MONEY_FAVOR"
	ADD CONSTRAINT "PK_TB_MONEY_FAVOR" -- 호의 기본키
	PRIMARY KEY (
		"FAVOR_NO" -- 호의 번호
	);

-- 호의
ALTER TABLE "TB_MONEY_FAVOR"
	ADD CONSTRAINT "CK_TB_MONEY_FAVOR_YN" -- 호의 체크 제약
	CHECK (GIVE_BACK_YN = 'Y' OR GIVE_BACK_YN = 'N');

-- 호의
ALTER TABLE "TB_MONEY_FAVOR"
	ADD CONSTRAINT "CK_TB_MONEY_FACOR_WEIGHT" -- 호의 체크 제약2
	CHECK (WEIGHT BETWEEN 0 AND 10); 
	
-- 호의
CREATE TABLE "TB_MONEY_FAVOR" (
		"FAVOR_NO" INTEGER NOT NULL,
		"RECEIVED_DATE" DATE NOT NULL,
		"RECEIVED_FAVOR" VARCHAR2(100) NOT NULL,
		"PERSON" VARCHAR2(100) NOT NULL,
		"PRC_RANGE" INTEGER NULL,
		"GIVE_BACK_YN" CHAR(1) DEFAULT 'N',
		"NOTE" VARCHAR2(300) NULL,
		"WEIGHT" INTEGER NOT NULL
);

-- 호의
ALTER TABLE "TB_MONEY_FAVOR"
	ADD CONSTRAINT "PK_TB_MONEY_FAVOR" -- 호의 기본키
	PRIMARY KEY (
		"FAVOR_NO" -- 호의 번호
	);

-- 호의
ALTER TABLE "TB_MONEY_FAVOR"
	ADD CONSTRAINT "CK_TB_MONEY_FAVOR_YN" -- 호의 체크 제약
	CHECK (GIVE_BACK_YN = 'Y' OR GIVE_BACK_YN = 'N');

-- 호의
ALTER TABLE "TB_MONEY_FAVOR"
	ADD CONSTRAINT "CK_TB_MONEY_FACOR_WEIGHT" -- 호의 체크 제약2
	CHECK (WEIGHT BETWEEN 0 AND 10); 
	

intellij ddl


-- auto-generated definition
create table TB_MONEY_FAVOR
(
    FAVOR_NO       NUMBER             not null
        constraint PK_TB_MONEY_FAVOR
            primary key,
    RECEIVED_DATE  DATE               not null,
    RECEIVED_FAVOR VARCHAR2(100)      not null,
    PERSON         VARCHAR2(100)      not null,
    PRC_RANGE      NUMBER,
    GIVE_BACK_YN   CHAR   default 'N' not null
        constraint CK_TB_MONEY_FAVOR_YN
            check (GIVE_BACK_YN = 'Y' OR GIVE_BACK_YN = 'N'),
    NOTE           VARCHAR2(300),
    WEIGHT         NUMBER default 0   not null
        constraint CK_TB_MONEY_FAVOR_WEIGHT
            check (WEIGHT BETWEEN 0 AND 10)
)
/

comment on table TB_MONEY_FAVOR is '호의, 은혜 '
/

comment on column TB_MONEY_FAVOR.FAVOR_NO is '호의 번호'
/

comment on column TB_MONEY_FAVOR.RECEIVED_DATE is '받은 날짜'
/

comment on column TB_MONEY_FAVOR.RECEIVED_FAVOR is '받은 것'
/

comment on column TB_MONEY_FAVOR.PERSON is '준 사람'
/

comment on column TB_MONEY_FAVOR.PRC_RANGE is '가격대'
/

comment on column TB_MONEY_FAVOR.WEIGHT is '은혜의 무게'
/