본문 바로가기
내일배움 과제/CH3 아이템 박스 시뮬레이터

DB

by GREEN나무 2024. 11. 26.
728x90

스킨 테이블(Skin) :케릭터 외관 설정

컬럼 형태 조건 설명
id int Primary key not null 자동생성
name VARCHAR(50)   not null 스킨 이름
description text   not null 스킨 설명
imgURL VARCHAR      
created_at DateTime   not null 생성 날짜
characters Character[]     1:n관계

계정 테이블(Account)

컬럼 형태 조건 설명
id int Primary Key not null 자동 생성된ID
username VARCHAR(50)   not null 사용자 이름
email VARCHAR(100) Unique not null 이메일 주소
password VARCHAR(255)   not null 암호화된 비밀번호
created_at DATETIME   default now 계정 생성 날짜
updatedAt DATETIME DateTime not null 수정시간
characters Character[]     1:N관계를 정의

캐릭터

컬럼 형태 조건 설명
id int Primary key not null 자동생성
name varchar(50)      
level int   default 1 캐릭터 레벨
health int   not null  
power int   not null  
money int   not null  
account   Foreign Key not null Account @relation(fields: [accountId], references: [id])
account_id        
skin   Foreign Key   스킨테이블 참조
skin_id        
created_at DATETIME   not null 캐릭터 생성 날짜

캐릭터 아이템 테이블(CharacterItem) :장착중인 아이템 목록

컬럼 형태 조건 설명
id int Primary key not null 자동생성
character_id int FK not null (FK): INT, Character.id를 참조
item_id int FK not null (FK): INT, Item.id를 참조
equipped_slot ENUM('head', 'body', 'hand', 'foot')   not null 장착된 부위
changed_at DATETIME   default now 장착된 날짜

캐릭터 인벤토리 테이블(CharacterInventory) :캐릭터가 보유는 하고있으나 장착하고 있지 않은 아이템 정보

컬럼 형태 조건 설명
id int Primary Key not null 자동 생성된ID
character_id int Foreign Key not null 캐릭터 테이블 참조
item_id int Foreign Key not null 아이템 테이블 참조
quantity int   default 1 아이템 수량
changed_at DATETIME   default now 추가된 날짜

아이템 테이블(Item) :모든 아이템 정보

컬럼 형태 조건 설명
id int Primary key not null 자동생성
name VARCHAR(50)   not null ('head', 'chest', 'legs', 'weapon', 'shield', 'accessory'),장착 부위
description text      
price int   not null  
slot ENUM   not null  
health int   not null  
power int   not null  
created_at DATETIME   default now 생성 날짜

 

더보기

DB ERD 관계선 : https://eyecandyzero.tistory.com/246

기호의 종류(도형 혹은 식별자)
  • |: 1개 / 실선은(dash) ‘1'을 나타낸다.
  • ∈: 여러개 / 까마귀 발(crow’s foot or Many)은 ‘다수' 혹은 '그 이상'을 나타낸다.
  • ○: 0개 / 고리(ring or Optional)은 ‘0'을 나타낸다.
  • Type1(실선과 실선): 정확히 1 (하나의 A는 하나의 B로 이어져 있다.)
  • Type2(까마귀발): 여러개 (하나의 A는 여러개의 B로 구성되어 있다.)
  • Type3(실선과 까마귀발): 1개 이상 (하나의 A는 하나 이상의 B로 구성되어 있다.)
  • Type4(고리와 실선): 0 혹은 1 (하나의 A는 하나 이하의 B로 구성되어 있다.)
  • Type5(고리와 까마귀발): 0개 이상 (하나의 A는 0또는 하나 이상의 B로 구성되 있다.)

슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번}
복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키.
후보 키(Candidate key): 유일성과 최소성을 만족하는 키. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불린다. 예를 들면, 주민등록번호, 학번 등
기본 키(Primary key): 후보 키에서 선택된 키. NULL값이 들어갈 수 없으며, 기본키로 선택된 속성(Attribute)은 동일한 값이 들어갈 수가 없다.
대체 키(Surrogate key): 후보 키 중에 기본 키로 선택되지 않은 키.
외래 키(Foreign Key): 어떤 테이블(Relation) 간의 기본 키(Primary key)를 참조하는 속성이다. 테이블(Relation)들 간의 관계를 나타내기 위해서 사용된다.

 

 

외래키 컬럼을 2개 만드는 이유 : 무결성원칙을 지키기 위해서 인듯.

                                                   사용하고 있는 캐릭터가 있으면 스킨 등을 삭제 하지 못하도록 막음

 

오류발생

사용중이던 스킨 삭제 시 캐릭터의 스킨을 기본값으로 바꾸기

onDelete:SetDefault 로 적기

참고 : https://lemonlog.tistory.com/91?category=1226142

// Error validating: This line is not a valid field or attribute definition.
model Skin {
  skinId      Int      @id @default(autoincrement()) @map("skinId")
  name        String   @unique @map("name")
  description String?  @map("description")
  imgURL      String?  @map("imgURL")
  created_at  DateTime @updatedAt @map("created_at")

  character Character[]

  @@map("Skin")
}

model Character {
  characterId Int      @id @default(autoincrement()) @map("characterId")
  skinId      Int      @default(1) @map("skinId")
  name        String   @unique @map("name")
  leval       Int      @map("leval")
  health      Int      @unique @map("health")
  power       Int      @map("power")
  money       Int      @map("money")
  createdAt   DateTime @default(now()) @map("createdAt")

// 이 줄에서 발생 
// onDelete: SET DEFAULT말고 onDelete:SetDefault 로 적기
  skin      Skin     @relation(fields: [skinId], references: [skinId], onDelete: SET DEFAULT)

  @@map("Character")
}

참고 출처

 

DB ERD 관계선 : https://eyecandyzero.tistory.com/246

키 종류: https://inpa.tistory.com/entry/DB-📚-키KEY-종류-🕵️-정리 [Inpa Dev 👨‍💻:티스토리]

prisma 문서 : https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/referential-actions#mysql

 

 

 

 

 

 

 

 

 

'내일배움 과제 > CH3 아이템 박스 시뮬레이터' 카테고리의 다른 글

참고 자료  (0) 2024.11.28
3.7부터 Sign up/Log in  (0) 2024.11.27