본문 바로가기
TIL

Nodejs 강의 숙련 MySQL(2)

by 황민도 2024. 5. 22.

내일배움캠프 스파르타 코딩클럽

어제에 이어서 가보도록 하겠다.

 

과제 1

-- **출판사(`Publisher`) 테이블**

-- 1. `publisherId` 컬럼을 가집니다. 기본 키 조건을 설정합니다.
-- 2. 출판사 명(`publisherName`) 컬럼을 가집니다. 문자열 타입을 가집니다.
-- 3. 출판사 주소(`publisherAddress`) 컬럼을 가집니다. 문자열 타입을 가집니다.

-- **책(`Books`) 테이블**

-- 1. `bookId` 컬럼을 가집니다. 기본 키 조건을 설정합니다.
-- 2. 책 명(`bookName`) 컬럼을 가집니다. 문자열 타입을 가집니다.

-- **이외 요구사항**

-- - **출판사**는 **여러개**의 **책**을 가질 수 있습니다.
-- - **출판사 명, 출판사 주소, 책 명**은 NULL 값을 가질 수 없습니다.

CREATE TABLE Publisher
(
  publisherId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  publisherName varchar(255) NOT NULL,
  publisherAddress varchar(255) NOT NULL
);

CREATE TABLE Books
(
  bookId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  PublisherId int(11) NOT NULL,
  bookName varchar(255) NOT NULL,
  FOREIGN KEY (PublisherId) REFERENCES Publisher (publisherId)
);
desc Books;

잘 설정된걸 확인 할 수 있다.

과제 2

-- **별(`Star`) 테이블**

-- 1. `starId` 컬럼을 가집니다. 기본 키 조건을 설정합니다.

-- **별 세부정보(`StarInfo`) 테이블**

-- 1. `starInfoId` 컬럼을 가집니다. 기본 키 조건을 설정합니다.
-- 2. 이름(`name`) 컬럼을 가집니다. 문자열 타입을 가집니다.
-- 3. 밝기(`magnitude`) 컬럼을 가집니다. 문자열 타입을 가집니다.
-- 4. 거리(`distance`) 컬럼을 가집니다. 문자열 타입을 가집니다.

-- **이외 요구사항**

-- - **별**은 1개의 **별 세부정보**를 가질 수 있습니다.
-- - **이름, 밝기, 거리** 컬럼은 NULL 값을 가질 수 없습니다.

CREATE TABLE Star
(
  starId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE StarInfo
(
  starInfoId int(11) NOT NULL AUTO_INCREMENT RRIMARY KEY,
  StarId int(11) NOT NULL UNIQUE, -- UNIQUE 를 설정하면 1개만 효과
  name varchar(255) NOT NULL,
  magnitude varchar(255) NOT NULL,
  distance varchar(255) NOT NULL,
  FOREIGN KEY (StarId) REFERENCES Star (starId)
);

 

desc StarInfo;

 

과제 3

-- **아이돌(`Idol`) 테이블**

-- 1. 이름(`name`) 컬럼을 가집니다.
-- 2. 나이(`age`) 컬럼을 가집니다.
-- 3. 성별(`gender`) 컬럼을 가집니다.

-- **소속사(`production`) 테이블**

-- 1. 회사명(`productionName`) 컬럼을 가집니다.
-- 2. 주소(`address`) 컬럼을 가집니다.

-- **소속사 멤버(`ProductionMember`) 테이블**

-- 1. 아이돌과 소속사를 연결해줍니다.
-- 2. 아이돌의 소속사 데뷔 날짜(`debutDate`) 컬럼을 가집니다.

-- **이외 요구사항**

-- - **아이돌**은 **소속사**를 가지지 않거나, 여러개를 가질 수 있습니다.
-- - **아이돌**의 **이름**은 중복될 수 없습니다.
-- - **소속사**는 **아이돌**을 가지지 않거나, 여러명을 소속시킬 수 있습니다.
-- - **소속사**의 **회사명**은 중복될 수 없습니다.
-- - **소속사**의 **주소**는 중복될 수 없습니다.

CREATE TABLE Idol
(
  idolId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name varchar(255) NOT NULL UNIQUE,
  age int(11) NULL,
  gender enum('M', 'F') NOT NULL
);

CREATE TABLE Production
(
  productionId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  productionName varchar(255) NOT NULL UNIQUE,
  address varchar(255) NOT NULL UNIQUE
);

CREATE TABLE ProductionMember
(
  productionMemberId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  IdolId int(11) NOT NULL,
  ProductionId int(11) NOT NULL,
  debutDate date NOT NULL,
  FOREIGN KEY (IdolId) REFERENCES Idol (idolId),
  FOREIGN KEY (ProductionId) REFERENCES Production (productionId)
);

 

desc ProductionMember;