MySQL 데이터베이스 설계 및 구현

레벨 1: 개념적 모델에서 MySQL 구현까지

미션 세부 정보

확립된 개념 모델을 MySQL의 물리적 구현으로 전환합니다.

관련 정보

1. 데이터베이스 설계 단계 및 각 단계에서의 작업
2. 개념적 모델
3. 논리적 모델 및 개념적 모델과의 관계
4. DBMS에서의 물리적 구현

데이터베이스 설계 단계 및 단계별 작업

데이터베이스 설계는 크게 다음과 같은 단계로 구분된다.
요구사항 분석
비즈니스 요구사항에 따라 애플리케이션 시스템에 포함된 데이터(정보)를 결정하고 요구사항을 처리하여 데이터 사전을 형성한다. 스트림, 데이터 저장, 데이터 처리 프로세스와 같은 문서
의 개념적 구조 설계
주요 작업은 데이터 모델링 관계형 데이터베이스 응용 시스템의 경우 ER 다이어그램은 주로 데이터와 데이터 간의 관계를 설명하는 데 사용됩니다(물론 일부 사람들은 UML 클래스 다이어그램). ER 다이어그램을 표현하는 방법에는 두 가지가 있는데, 하나는 대만 가오슝에서 태어난 Peter Chen(루이지애나 주립대학교 교수)이 처음 제안한 Chen의 ER 다이어그램인데, 교과서에서는 주로 이런 종류의 ER 다이어그램을 가르칩니다. 그림 1은 교과서에서 일반적으로 사용되는 학생 과목 선택 시스템의 개념적 모델을 표현하기 위해 Chen의 ER 다이어그램을 사용합니다.

학생 코스 선택의 개념적 모델

그림 1 학생 선택 과목
Chen의 ER 다이어그램은 많은 공간을 차지하는데, 시스템에 엔티티와 속성이 많을 때 엔티티를 나타내는 각 사각형에서 퍼지는 타원(속성을 나타내는)은 전체 모델이 혼란스럽고 복잡하게 보입니다. 그래서 후기 Crow's foot(까마귀 발) 스타일의 ER 다이어그램이 있었습니다. 그림 2는 Crow's foot ER 다이어그램을 사용하여 학생과 부서 간의 관계를 표현합니다.

까마귀 발

그림 2 Crow's foot ER 다이어그램
그림 2는 학과와 학생 간의 일대다 관계를 반영하고 있으며 두 엔터티의 속성은 각 엔터티 이름 아래에 나열되어 있습니다. 양쪽 끝에 표시가 있는 선을 사용하여 두 개체를 연결하여 둘 사이의 연결을 표현하고 선 중간에 연락처 이름을 적어 공간을 절약합니다. 일대다 연결의 모양이 까마귀 발과 매우 유사하므로 이름이 까마귀 발입니다(대부분의 새의 발이 이와 같지만).

논리 구조 설계
주요 작업은 ER 다이어그램을 관계형 모델로 변환하는 것입니다. 개념적 구조에서 논리적 구조로의 변환에는 규칙이 있는데, 이는 두 개체 간의 연결과 관련이 있으며, 이미 교과서에서 충분히 이야기했습니다. Crow's foot형 ER 다이어그램의 장점 중 하나는 원래 다이어그램에 약간의 변경(예: 한 터미널의 메인 코드를 멀티 터미널에 직접 추가)한 다음 논리적 구조로 변환할 수 있다는 것입니다. 기본 코드, 외부 코드, 색인 추가 및 지정 DBMS에 나열된 모든 유형은 신속하게 물리적 모델이 될 수 있으므로 컴퓨터가 데이터베이스 개체를 자동으로 생성하는 데 편리합니다. 그림 3은 각 속성의 데이터 유형을 지정하고 외부 코드를 정의했습니다.

파이칼 모델

그림 3 물리적 모드에 가까운 Crow's foot 모델

물리적 구조 설계
물리적 구조 설계의 주요 작업은 논리적 구조를 기반으로 저장 구조와 접근 방법을 결정하고 특정 DBMS에 대한 모든 데이터 유형을 결정하는 것입니다.

구현 및 운영 및 유지
선택된 DBMS에서 데이터 객체 생성, 데이터 초기화, 테스트 실행, 지속적인 디버깅 과정에서 시스템을 개선하고 지속적으로 개선 및 유지 관리합니다.

ERWIN, Navicat, Microsoft Visio, Draw.IO, MySQL Workbench 등과 같은 대부분의 모델링 도구는 Crows' foot을 지원합니다. Visio 및 draw.io는 Chen의 ER 다이어그램도 지원합니다. 위의 도구 중 Draw.IO 및 MySQL Workbench만 무료입니다. ERWIN, Navicat 및 MySQL Workbench도 리버스 엔지니어링, 즉 빌드된 데이터베이스, 리버스 내보내기 모델을 기반으로 하는 리버스 엔지니어링을 지원하지만 일반적으로 물리적 모델입니다. Navicat은 논리적 모델과 개념적 모델에 대한 지속적인 반전을 지원합니다. 기본적으로 리버스엔지니어링을 기반으로 varchar(50)을 string으로 변경하는 등 DMBS의 특정 데이터 타입을 교체하면 논리적 모델이 되고, 논리적 모델에서 외부 코드 열을 모두 제거하면 개념적 모델이 되고, 개념적 모델은 데이터 유형에 주석을 달지 않을 수 있습니다. 그러나 프로덕션 환경에서는 모델을 표현하기 위해 소프트웨어를 사용하는 경우가 많으며 실제로는 string, integer, float, datetime, boolean 등과 같은 일반적인 데이터 유형이 개념적 모델에서 표시되었습니다.

프로그래밍 요구 사항

이 수준의 작업은 구축된 논리 모델에 따라 MySQL 구현을 완료하는 것입니다. 논리적 ER 다이어그램은 그림 3에 나와 있습니다.

예약 시스템의 ER 다이어그램

그림 3 항공권 예약 시스템 개념 모델의 ER 다이어그램
설명: 이 그림은 draw.io로 그린 그림으로 별도의 소프트웨어 설치 없이 브라우저의 주소창에 draw.io를 입력하면 불러올 수 있습니다.

신청 배경 소개


1. 사용자(user) 사용자에는 두 가지 유형이 있으며, 일반 사용자는 티켓을
예매할 수 있고 관리 사용자는 항공권 운영을 유지 관리할 수 있는 권한을 가집니다. 전체 시스템. 단순화를 위해 두 가지 유형의 사용자가 병합되고 admin_tag 태그로 구분됩니다. 사용자 속성(비즈니스 제약 포함)은 다음과 같습니다.
사용자 ID: user_id int 기본 코드, 자동 증가
이름: 이름 varchar(50)은 비워둘 수 없습니다
성: 성 varchar(50)은 비워둘 수 없습니다 생일
: 생년월일은 비워둘 수 없습니다
성별 : sex char(1) 비워둘 수 없음 이메일
: 이메일 varchar(50)
연락처 번호: 전화 varchar(30)
사용자 이름: 사용자 이름 varchar(20) 비워둘 수 없음, 반복할 수 없음
비밀번호: password char(32) 사용할 수 없음
emptyAdministrator 플래그: admin_tag tinyint 기본값 0(비관리자), 비워둘 수 없음

2. 승객
사용자는 시스템에 로그인하여 티켓을 구매할 필요가 없으므로 사용자 및 승객 정보가 별도로 저장됩니다. 속성은 다음과 같습니다.
승객 번호: passenger_id int 자동 증가, 기본 코드
문서 번호: id char(18) 비워두거나 반복할 수 없습니다. 이름
: firstname varchar(50) 비워둘 수 없습니다.
성: lastname varchar(50) 다음을 사용할 수 없습니다. 비어 있음
이메일: 메일 varchar(50)
전화: 전화 varchar(20) null 허용 안 됨
성별: sex char(1) null 허용 안 됨
생일: 생년월일

3. 공항(공항)은 다음 같은
속성을 가지고 있습니다 . 세계에서 이름: 이름 varchar(50) 비워둘 수 없음, 공통 색인 도시: 도시 varchar(50) 국가: 국가 varchar(50) 위도: 위도 소수점(11,8) 경도: 경도 소수점(11,8) 모든 공항 세계에는 고유한 IATA 코드와 ICAO 코드가 있으며 IATA는 3자, ICAO는 4자입니다. 예를 들어 수도 공항의 (IATA, ICAO)는 (PEK, ZBAA), Daxing 공항은 (PKX, ZBAD), Tianhe 공항은 (WUH, ZHHH)입니다. 출발지와 도착지 모두 IATA가 항공기 등록판에 표시합니다. 공항 위치를 지도에 표시하기 위해서는 위도와 경도 정보를 기록해야 합니다.








4. 항공사(항공사)는 다음과
같은 속성을 가
집니다
. 항공사 코드는 MU(중국동방항공), CA(에어차이나), CZ(중국남방항공) 등 2자리입니다. 편명 앞에는 일반적으로 소속 항공사의 IATA 코드가 붙습니다.

5. 민간 항공기(비행기)
속성:
숫자: airplane_id int 자체 증가, 기본 코드
유형: 유형 varchar(50)은 B737-300, A320-500 등과 같이 비워둘 수 없습니다.
좌석: 용량 smallint는 될 수 없습니다. 빈
ID: 식별자 varchar( 50) null을 허용하지 않음

6. 정기 비행 일정(비행 일정)
비행은 일반적으로 주 단위로 편성됩니다. 예를 들면 월요일과 금요일, 주당 2편입니다.
속성 있음:
항공편 번호: flight_no char(8) 마스터 코드
출발 시간: 출발 시간이 비어 있지 않음
도착 시간: 도착 시간이 비어 있지 않음
비행 시간: 기간 smalint가 비어 있지 않음
월요일: 월요일 tinyint 기본값 0
화요일: 화요일 tinyint 기본값 0
수요일 : 수요일 tinyint 기본값 0
목요일: 목요일 tinyint
기본값 0 금요일
: 금요일 tinyint 기본값 0 토요일: 토요일 tinyint 기본값 0
일요일: 일요일 tinyint 기본값 0
비행 시간은 일반적으로 분 단위로 측정됩니다.

7. 비행 스케줄(비행)
항공편은 정규 항공편 스케줄에 따라 조정됩니다. 하지만 스케줄이 고정된 것도 아니고, 예정된 모든 항공편이 실제로 이륙하는 것도 아니고, 항상 예정된 시간에 이륙하는 것도 아니므로 실제 항공편을 별도로 정리하고 기록해야 합니다.
기록할 정보는 다음과 같습니다.
항공편 번호: flight_id int 자동 증가, 마스터 코드
출발 시간: 출발 날짜시간이 비어 있지 않음
도착 시간: 도착 날짜시간이 비어 있지 않음
비행 시간: 기간 smallint가
비어 일부 시스템은 비행 위도도 표시합니다. 실시간으로 경도 및 고도 위치, 여기에서 실시간 비행 정보를 단순화하고 제거했습니다.

8. 항공권(항공권)
이용자는 본인 또는 친척, 친구를 위해 특정 항공편의 항공권을 구매할 수 있습니다. 티켓의 속성은 다음과 같습니다.
티켓 번호: ticket_id int 자체 증가, 기본 코드
좌석 번호: 좌석 char(4)
가격: 가격 십진수(10,2)는 비워둘 수 없습니다.

9. 엔터티 간 연결
엔터티 간 연결은 ER 다이어그램에 명확하게 표시됩니다.

  • 각 항공사에는 기지라고도 하는 홈 포트(공항)가 있습니다. 큰 공항은 여러 회사의 기지가 될 수 있고 작은 공항은 어떤 항공사의 기지도 아닐 수 있습니다.
  • 각 항공편은 항공사에 속하며 항공사에는 여러 항공편이 있을 수 있습니다.
  • 모든 민간 항공 항공기는 항공사에 속하며 항공사는 둘 이상의 항공기를 보유할 수 있습니다.
  • 각 항공기는 여러 비행을 할 수 있으며 하나의 비행은 하나의 항공기로 운영됩니다.
  • 항공편은 항공기 유형에 따라 여러 티켓을 판매할 수 있습니다. 티켓은 특정 항공편의 티켓입니다.
  • 사용자는 티켓을 여러 번 예약할 수 있으며 승객은 비행기를 여러 번 탈 수 있습니다. 항공권은 특정 승객을 위해 사용자가 구매한 특정 항공편의 항공권이어야 합니다. 즉, 티켓 정보는 승객과 관련된 정보일 뿐만 아니라 구매자 정보도 기록합니다(두 사람이 동일인인 경우도 있음). 단순화를 위해 주문 시간은 고려하지 않습니다.
  • 정기 비행이든 실제 비행이든 한 공항에서 출발하여 다른 공항에 도착합니다. 그러나 공항은 많은 항공편의 출발지이자 목적지가 될 수 있습니다.

위의 정보와 주어진 ER 다이어그램을 기반으로 데이터베이스 구축, 테이블 생성, 기본 키, 외부 키, 인덱스 생성, 기본값 지정 및 비어 있지 않음과 같은 제약 조건을 포함하여 MySQL에서 flight_booking을 구현하는 설명을 제공하십시오. 모든 인덱스는 BTREE를 사용합니다. 모든 제약 조건의 이름은 필요하지 않습니다. 모든 외부 코드는 기본 코드와 동일한 이름을 갖습니다. 두 가지 예외가 있습니다. 예정된 항공편과 비행된 항공편 모두 출발 공항과 도착 공항을 포함하고 외부 키는 기본 키와 동일한 이름을 가지므로 동일한 테이블에 동일한 이름을 가진 두 개의 열이 생성됩니다. 따라서 이 두 개의 외부 코드는 예외로 처리됩니다. 출발 공항의 이름은 from이고 도착 공항의 이름은 to입니다.
참고: 모든 테이블 이름과 열 이름에는 대문자가 없습니다. 칼럼 이름이 키워드와 같은 이름이니 적절히 처리해 주세요. 한 번 평가를 통과하지 못할 수도 있으므로 반복적으로 코드를 수정하고 다시 실행해야 하는 상황을 고려하십시오.

위의 그림이 명확하지 않다고 생각되면
https://gitee.com/kylin8575543/db2022-spring
으로 이동하여 교육에 필요한 데이터 패키지를 다운로드하거나 다음 문서를 직접 볼 수 있습니다.
https:/ /gitee.com/kylin8575543/db2022-spring/blob/master/flightbooking.png

오른쪽 코드 파일에 설명을 입력한 후 평가를 위해 제출하십시오.

테스트 지침

평가 프로그램은 코드 파일을 실행한 다음 모든 데이터베이스 개체가 예상 결과와 완전히 일치하는지 확인합니다(기본 키, 외래 코드, 기본값 및 고유를 포함한 모든 제약 조건의 이름은 평가에 포함되지 않음).


임무를 시작합시다. 성공을 기원합니다!

참조 코드

 # 请将你实现flight_booking数据库的语句写在下方:
 
drop database if exists flight_booking; 
create database flight_booking; 
use flight_booking;
 
SET NAMES utf8mb4; 
SET FOREIGN_KEY_CHECKS = 0;
 
DROP TABLE IF EXISTS airline ; CREATE TABLE airline ( airline_id int NOT NULL AUTO_INCREMENT, name varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, iata char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, airport_id int NOT NULL, PRIMARY KEY ( airline_id ) USING BTREE, UNIQUE INDEX iata_unq ( iata ) USING BTREE, INDEX base_airport_idx ( airport_id ) USING BTREE, CONSTRAINT airline_ibfk_1 FOREIGN KEY ( airport_id ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
DROP TABLE IF EXISTS airplane ; CREATE TABLE airplane ( airplane_id int(0) NOT NULL AUTO_INCREMENT, type varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, capacity smallint(0) NOT NULL, identifier varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, airline_id int(0) NOT NULL,
PRIMARY KEY ( airplane_id ) USING BTREE, INDEX airplane_ibfk_1 ( airline_id ) USING BTREE, CONSTRAINT airplane_ibfk_1 FOREIGN KEY ( airline_id ) REFERENCES airline ( airline_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
DROP TABLE IF EXISTS airport ; CREATE TABLE airport ( airport_id int NOT NULL AUTO_INCREMENT, iata char(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, icao char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, city varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, country varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, latitude decimal(11, 8) NULL DEFAULT NULL, longitude decimal(11, 8) NULL DEFAULT NULL, PRIMARY KEY ( airport_id ) USING BTREE, UNIQUE INDEX iata_unq ( iata ) USING BTREE, UNIQUE INDEX icao_unq ( icao ) USING BTREE, INDEX name_idx ( name ) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
 
DROP TABLE IF EXISTS passenger ; CREATE TABLE passenger ( passenger_id int NOT NULL AUTO_INCREMENT, id char(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, firstname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, lastname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, mail varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, phone varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, sex char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, dob date NULL DEFAULT NULL, PRIMARY KEY ( passenger_id ) USING BTREE, UNIQUE INDEX id_unq ( id ) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
 
DROP TABLE IF EXISTS ticket ; CREATE TABLE ticket ( ticket_id int NOT NULL AUTO_INCREMENT, flight_id int NOT NULL, seat char(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, passenger_id int NOT NULL, price decimal(10, 2) NOT NULL, user_id int NOT NULL, PRIMARY KEY ( ticket_id ) USING BTREE, INDEX flight_idx ( flight_id ) USING BTREE, INDEX passenger_idx ( passenger_id ) USING BTREE, INDEX ticket_ibfk_3 ( user_id ) USING BTREE, CONSTRAINT ticket_ibfk_1 FOREIGN KEY ( flight_id ) REFERENCES flight ( flight_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT ticket_ibfk_2 FOREIGN KEY ( passenger_id ) REFERENCES passenger ( passenger_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT ticket_ibfk_3 FOREIGN KEY ( user_id ) REFERENCES user ( user_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
 
 
DROP TABLE IF EXISTS user ; CREATE TABLE user ( user_id int NOT NULL AUTO_INCREMENT, firstname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, lastname varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, dob date NOT NULL, sex char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
phone varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, username varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, password char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, admin_tag tinyint NOT NULL DEFAULT 0, PRIMARY KEY ( user_id ) USING BTREE, UNIQUE INDEX user_unq ( username ) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
 
 
DROP TABLE IF EXISTS flightschedule ; CREATE TABLE flightschedule ( flight_no char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `from` int NOT NULL, `to` int NOT NULL, departure time NOT NULL, arrival time NOT NULL, duration smallint NOT NULL,
airline_id int NOT NULL, monday tinyint NULL DEFAULT 0, 
tuesday tinyint NULL DEFAULT 0, 
wednesday tinyint NULL DEFAULT 0, 
thursday tinyint NULL DEFAULT 0, friday tinyint NULL DEFAULT 0, saturday tinyint NULL DEFAULT 0, sunday tinyint NULL DEFAULT 0, 
PRIMARY KEY ( flight_no ) USING BTREE, 
INDEX from_idx ( `from` ) USING BTREE, 
INDEX to_idx ( `to` ) USING BTREE, 
INDEX airline_idx ( airline_id ) USING BTREE, 
CONSTRAINT flightschedule_ibfk_1 FOREIGN KEY ( `from` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flightschedule_ibfk_2 FOREIGN KEY ( `to` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flightschedule_ibfk_3 FOREIGN KEY ( airline_id ) REFERENCES airline ( airline_id ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
DROP TABLE IF EXISTS flight ; CREATE TABLE flight ( flight_id int NOT NULL AUTO_INCREMENT, flight_no char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `from` int NOT NULL, `to` int NOT NULL,
departure datetime NOT NULL, arrival datetime NOT NULL, duration smallint NOT NULL, airline_id int NOT NULL, airplane_id int NOT NULL, 
PRIMARY KEY ( flight_id ) USING BTREE, 
INDEX from_idx ( `from` ) USING BTREE, 
INDEX to_idx ( `to` ) USING BTREE, 
-- INDEX departure_idx ( departure ) USING BTREE, 
-- INDEX arrivals_idx ( arrival ) USING BTREE, 
INDEX airline_idx ( airline_id ) USING BTREE, 
INDEX airplane_idx ( airplane_id ) USING BTREE, 
INDEX flightno ( flight_no ) USING BTREE, 
CONSTRAINT flight_ibfk_1 FOREIGN KEY ( `from` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_2 FOREIGN KEY ( `to` ) REFERENCES airport ( airport_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_3 FOREIGN KEY ( airline_id ) REFERENCES airline ( airline_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_4 FOREIGN KEY ( airplane_id ) REFERENCES airplane ( airplane_id ) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT flight_ibfk_5 FOREIGN KEY ( flight_no ) REFERENCES flightschedule ( flight_no ) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
 
 
SET FOREIGN_KEY_CHECKS = 1;

레벨 2: 요구사항 분석에서 논리적 모델로

미션 세부 정보

이 수준의 작업:
애플리케이션 시나리오의 비즈니스 요구 사항 설명에 따라 ER 다이어그램을 완성하고 관계형 모델로 변환합니다.
디자인 문서 제출

업무 기능 설명

극장 관리 시스템을 설계합니다. 영화관은 현재 상영관과 영화를 정리하고 고객이 도착하면 원하는 장면의 영화 티켓을 구매하고 해당 상영관에 입장하여 관람할 수 있습니다. 시스템에는 다음 엔티티 세트가 있습니다.

  1. 영화(movie): 속성에는 식별 번호(movie_ID), 영화 이름(title), 유형(type), 기간(runtime), 개봉일(release_date), 감독 이름(director), 주연 이름(starring)이 포함됩니다.
  2. 고객(customer): 속성에는 식별번호(c_ID), 이름(name), 휴대폰 번호(phone)가 포함됩니다.
  3. 강당(홀): 속성에는 식별 번호(hall_ID), 프로젝션 모드(mode), 수용 인원 및 위치가 포함됩니다.
  4. 일정(schedule): 속성은 식별번호(schedule_ID), 날짜(date), 시간(time), 티켓가격(price), 투표수(number)를 포함한다.
  5. 영화 티켓(티켓): 속성에는 식별 번호(ticket_ID) 및 좌석 번호(seat_num)가 포함됩니다. 엔터티 간의 관계는 다음과 같이 설명됩니다. ① 고객과 영화 티켓 간에는 일대다 구매 관계가 있습니다. 각 고객은 여러 장의 영화표를 구매할 수 있으며 각 영화표는 한 명의 고객이 구매합니다. ② 영화표와 장면 사이에는 다대일 관계가 있다. 영화 티켓은 하나의 장면에만 속하며 한 장면에는 여러 개의 영화 티켓이 있습니다. ③ 과시와 영화는 일대다 관계가 있다. 각 장면에 하나의 영화가 표시되며 각 영화는 여러 장면에서 표시될 수 있습니다. ④ 장면과 강당은 일대다 관계이다. 각 장면은 하나의 프로젝션 홀에 있으며 각 프로젝션 홀은 여러 장면을 배열할 수 있습니다.

임무 요구 사항

  1. 위의 요구 사항에 따라 ER 다이어그램을 그립니다.
  2. 해당 관계 스키마를 제공하십시오.

모델링 도구로 모델링하는 경우 모델을 그림으로 저장하고, 수동으로 그리는 경우 사진을 찍거나 사진에 서명하거나 전자 서명을 추가하십시오. 이미지 파일의 이름을 ersolution.jpg로 지정하십시오. 그리고 이미지 파일을 인터넷(예: github 또는 gitee의 오픈 소스 프로젝트 또는 직접 액세스할 수 있는 모든 위치)에 업로드합니다. 오른쪽 편집기의 두 번째 줄에 그림에 액세스할 수 있는 URL을 입력합니다 URL은 사진을 특정 웹 페이지에서 찾는 것이 아니라 URL을 클릭하여 바로 사진을 열어야 합니다. .

그런 다음 파일 편집기에서 관계형 스키마를 작성합니다.
관계 모델의 표현 형식은
학생(학번, 이름, 성별, 생년월일, 학과 ID), 주 코드: (학번), 외부 코드: (학과 ID) 순한자
기호를 사용하지 않습니다.

테스트 지침

평가 프로그램은 문서 제출 여부를 확인합니다. 디자인의 다중 솔루션 특성으로 인해 평가 프로그램은 특정 점수를 부여할 수 없습니다. 문서가 제출되고 관계 모델이 제공되는 한 점수가 부여됩니다. 먼저 할당되었습니다. 수동 검토 후 완료 여부에 따라 일정 점수가 총점에서 차감(또는 차감되지 않음)됩니다.


임무를 시작합시다. 성공을 기원합니다!

코드 참조

 请给出ER图文件存放的URL:
https://free.wzznft.com/i/2023/05/18/ersolution.jpg
 以下给出关系模式:

电影(movie)(movie_ID, title, type, runtime, release_date, director, starring), 主码:(movie_ID)

顾客(customer)(c_ID, name, phone), 主码:(c_ID)

放映厅(hall)(hall_ID, mode, capacity, location), 主码:(hall_ID)

排场(schedule)(schedule_ID, date, time, price, number, hall_ID, movie_ID), 主码:(schedule_ID),外码:(hall_ID) 参照放映厅(hall)(movie_ID) 参照电影(movie)

电影票(ticket)(ticket_ID, seat_num, c_ID, schedule_ID), 主码:(ticket_ID),外码:(c_ID) 参照顾客(customer)(schedule_ID) 参照排场(schedule)

사진 백업
응급실

레벨 3: 모델링 도구 사용

미션 세부 정보

이 수준의 작업:
MySQL Workbench의 포워드 엔지니어링 기능을 사용하여 빌드된 모델 파일을 SQL 스크립트로 자동 변환합니다.

관련 정보

이 작업을 완료하려면 다음을 마스터해야 합니다.
1. 일반적으로 사용되는 모델링 도구 및 해당 특성
2. 모델링 도구 사용 방법 배우기
3. 포워드 엔지니어링 및 리버스 엔지니어링

모델링 도구 소개

1. ERWIN
erwin Data Modeler 직관적인 디자인과 아카이빙 기능을 갖춘 업계 최고의 데이터 모델링 솔루션은 기업 전체의 모든 스토리지 위치에 있는 모든 데이터의 관리를 지원합니다. 하지만 수수료가 더 비싸지만 대학생들은 1년 동안 유효한 erwin Data Modeler Academic Edition을 신청할 수 있습니다. 공식 웹사이트로 이동하여 특정 기능 및 사용 방법을 이해하기 위한 문서를 다운로드할 수 있습니다.
중국 공식 웹사이트: http://www.erwinchina.com/

2. Navicat
Navicat은 일반적으로 사용되는 거의 모든 DBMS를 지원하고 개념적 모델, 논리적 모델 및 물리적 모델을 지원하며 모델 파일을 기반으로 모든 DBMS에 대한 스크립트를 생성할 수 있습니다. 포워드 엔지니어링 및 리버스 엔지니어링을 지원합니다.
소프트웨어도 무료입니다.
Navicat은 또한 많은 사용자가 사용하는 DBMS 클라이언트 관리 도구입니다.
중국 공식 웹사이트:
https://www.navicat.com.cn/

3. 마이크로소프트 비시오

이제 Visio는 Office와 분리되어 별도로 구매해야 합니다. Chen의 ER 다이어그램과 Crow's foot을 지원합니다. 개념적 모델, 논리적 모델 등을 표현하는 데 사용할 수 있습니다.

4.Draw.io는
가장 쉽게 얻을 수 있는 모델링 도구입니다.웹 브라우저의 주소 표시줄에 URL만 입력하면 불러올 수 있습니다:
draw.io
또는:
https://app.diagrams.net/
전자를 입력하십시오. 자동으로 후자로 이동합니다.
개념적 모델과 논리적 모델을 설정하는 데 더 적합합니다. Chen의 ER 다이어그램과 Crow's feet ER 다이어그램이 모두 지원됩니다. 단, 특정 DBMS와 연동할 수 없으며 포워드 및 리버스 엔지니어링을 지원하지 않는다.

5. MySQL Workbench는
MySQL Community Edition과 함께 제공되는 무료 도구입니다. 또한 비교적 사용하기 쉬운 그래픽 인터페이스 클라이언트 관리 도구입니다. 정방향 및 역방향 도구를 지원합니다.
사용 설명서는 공식 웹 사이트에서 다운로드할 수 있습니다.

프로그래밍 요구 사항


https://gitee.com/kylin8575543/db2022-spring 으로 이동하여
교육에 필요한 데이터 패키지를 다운로드하거나 https://gitee.com/kylin8575543/db2022-spring/raw/master/rbac 파일을 다운로드하십시오
. mwb

구축된 모델 파일 rbac.mwb 입니다 MySQL Workbench 모델링 모듈의 Forward engineering 기능을 이용하여 SQL 스크립트를 자동으로 내보내십시오.

포워드 엔지니어링

오프라인 처리 후 스크립트를 코드 파일에 붙여넣으십시오.

테스트 지침

프로파일러는 코드 파일을 실행하고 모든 데이터베이스 개체가 예상대로 정확히 있는지 확인합니다. Workbench에서 내보낸 스크립트를 수정할 필요가 없습니다.


임무를 시작합시다. 성공을 기원합니다!

코드 참조

 # 请将利用MySQL Workbench软件的Modeling工具,经forward engineering 导出的创建schema的SQL语句完整粘到此处:
 
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @OLD_SQL_MODE=@@SQL_MODE, 
SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
 
CREATE SCHEMA IF NOT EXISTS rbac DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ; 
USE rbac ;
 
 
CREATE TABLE IF NOT EXISTS rbac . aprole (
RoleNo INT NOT NULL COMMENT '角色编号', 
RoleName CHAR(20) NOT NULL COMMENT '角色名', 
Comment VARCHAR(50) NULL DEFAULT NULL COMMENT '角色描述', 
Status SMALLINT NULL DEFAULT NULL COMMENT '角色状态', 
PRIMARY KEY ( RoleNo )) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8mb4 
COLLATE = utf8mb4_0900_ai_ci 
COMMENT = '角色表';
 
CREATE TABLE IF NOT EXISTS rbac . apuser(
    UserID CHAR(8) NOT NULL COMMENT '用户工号',
    UserName CHAR(8) NULL DEFAULT NULL COMMENT '用户姓名', 
    Comment VARCHAR(50) NULL DEFAULT NULL COMMENT '用户描述', 
    PassWord CHAR(32) NULL DEFAULT NULL COMMENT '口令', 
    Status SMALLINT NULL DEFAULT NULL COMMENT '状态',
    PRIMARY KEY ( UserID ), 
    UNIQUE INDEX ind_username ( UserName ASC) VISIBLE) 
    ENGINE = InnoDB 
    DEFAULT CHARACTER SET = utf8mb4
    COLLATE = utf8mb4_0900_ai_ci 
    COMMENT = '用户表';
 
CREATE TABLE IF NOT EXISTS rbac . apgroup (
    UserID CHAR(8) NOT NULL COMMENT '用户编号', 
    RoleNo INT NOT NULL COMMENT '角色编号', 
    PRIMARY KEY ( UserID , RoleNo ), 
    INDEX FK_apGroup_apRole ( RoleNo ASC) VISIBLE, 
    CONSTRAINT FK_apGroup_apRole FOREIGN KEY ( RoleNo ) REFERENCES rbac . aprole ( RoleNo ),
    CONSTRAINT FK_apGroup_apUser FOREIGN KEY ( UserID ) REFERENCES rbac . apuser ( UserID ))
    ENGINE = InnoDB 
    DEFAULT CHARACTER SET = utf8mb4 
    COLLATE = utf8mb4_0900_ai_ci 
    COMMENT = '角色分配表';
 
CREATE TABLE IF NOT EXISTS rbac . apmodule (
    ModNo BIGINT NOT NULL COMMENT '模块编号', 
    ModID CHAR(10) NULL DEFAULT NULL COMMENT '系统或模块的代码', 
    ModName CHAR(20) NULL DEFAULT NULL COMMENT '系统或模块的名称', PRIMARY KEY ( ModNo ))
    ENGINE = InnoDB 
    DEFAULT CHARACTER SET = utf8mb4 
    COLLATE = utf8mb4_0900_ai_ci 
    COMMENT = '功能模块登记表';
 
CREATE TABLE IF NOT EXISTS rbac . apright (
RoleNo INT NOT NULL COMMENT '角色编号', 
ModNo BIGINT NOT NULL COMMENT '模块编号', 
PRIMARY KEY ( RoleNo , ModNo ), 
INDEX FK_apRight_apModule ( ModNo ASC) VISIBLE,
CONSTRAINT FK_apRight_apModule 
FOREIGN KEY ( ModNo ) 
REFERENCES rbac . apmodule ( ModNo ), 
CONSTRAINT FK_apRight_apRole
FOREIGN KEY ( RoleNo ) 
REFERENCES rbac . aprole ( RoleNo ))
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8mb4 
COLLATE = utf8mb4_0900_ai_ci 
COMMENT = '角色权限表';
 
SET SQL_MODE=@OLD_SQL_MODE; 
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; 
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

추천

출처blog.csdn.net/qq_46373141/article/details/130745049