[코딩일지] 231020
테이블 자기자신 참조
자기자신을 참조하는 경우가 궁금해서 찾아봤더니 잘 정리해주신 글이 있었다.
요약
자기자신 참조 가능하고, 관계 테이블을 통해 다대다 관계도 설명이 가능하다.
도움받은 링크
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 '은혜의 무게'
/