생활코딩

Coding Everybody

논리적 데이터 모델링 1

토픽 생활코딩 > DATABASE > 관계형 데이터 모델링

수업소개

ER diagram을 관계형 데이터베이스 모델에 어울리게 변환하는 과정을 다루고 있는 수업입니다. 여기서는 Mapping rule을 중점적으로 공부합니다. 

 

 

강의1

 

 

 

강의2

 

 

 

강의3

 

 

 

 

강의4

 

 

 

 

강의5

 

 

 

 

강의6

댓글

댓글 본문
  1. Cpt.MJ
    So interesting!
  2. Sansol Park
    네, 맞습니다. 매핑 테이블과 본문 테이블 간의 관계를 보면, 매핑 테이블 입장에서 본문은 쓸 수도 있고 안 쓸 수도 있기 때문에 옵셔널(선택적)입니다. 반대로, 본문 테이블 입장에서는 매핑이 반드시 존재해야 하므로 맨더터리(필수)입니다. 따라서 카디널리티는 N:1이 됩니다.

    이러한 관계를 ER 다이어그램에서 표현하면, 매핑 테이블 쪽에는 동그라미(옵셔널)를, 본문 테이블 쪽에는 직선(맨더터리)를 그리게 됩니다.

    이는 매핑 테이블이 본문 테이블을 참조하고 있으며, 본문 테이블은 해당 매핑 없이는 존재할 수 없기 때문입니다. 따라서 매핑 테이블에서 본문 테이블로의 관계는 옵셔널이고, 본문 테이블에서 매핑 테이블로의 관계는 맨더터리입니다.

    이렇게 복잡한 관계를 통해 N:M 관계를 풀어내는 것이 관계형 데이터베이스 모델링의 중요한 부분입니다.

    GPT-4의 답변입니다.
    대화보기
    • Sansol Park
      질문에 대한 답변을 시작하기 전에, 맨더터리와 옵셔널에 대해 간단히 설명하겠습니다. 맨더터리는 '필수적인'이라는 의미로, 관계에서 한 쪽 엔티티가 반드시 존재해야 함을 의미합니다. 반면, 옵셔널은 '선택적인'이라는 의미로, 관계에서 한 쪽 엔티티의 존재가 필수적이지 않음을 의미합니다.

      저자와 휴면자의 관계에 대한 질문에 대해 답변하겠습니다. 저자는 휴면자가 될 수도, 안 될 수도 있습니다. 따라서 저자와 휴면자 사이의 관계는 옵셔널일 수 있습니다. 이는 ER 다이어그램에서 저자 쪽에는 직선(맨더터리)이 아니라 동그라미(옵셔널)를 사용하여 표현할 수 있습니다.

      그러나 이는 상황에 따라 다를 수 있습니다. 예를 들어, 특정 조직에서는 저자가 반드시 휴면자가 되어야 하는 규칙이 있다면, 저자와 휴면자 사이의 관계는 맨더터리가 될 수 있습니다. 이 경우, ER 다이어그램에서는 저자 쪽에 직선을 사용하여 표현하게 됩니다.

      맨더터리와 옵셔널이 동시에 존재할 수 있는지에 대한 질문에는, 한 쌍의 엔티티 사이에서는 동시에 존재할 수 없습니다. 하지만, 한 엔티티가 여러 관계를 가지고 있을 때는 각 관계마다 맨더터리 또는 옵셔널이 될 수 있습니다. 예를 들어, 저자는 휴면자와의 관계에서는 옵셔널일 수 있지만, 다른 엔티티와의 관계에서는 맨더터리일 수 있습니다.

      GPT-4의 답변입니다.
      대화보기
      • 고롱박이
        챗 gpt가 작성해준 코드 예시입니다.혹시 이상 있다면 살펴주시길 바랍니다.

        프론트엔드(HTML과 자바스크립트)
        <!DOCTYPE html>
        <html>
        <head>
        <title>책 및 저자 관계 설정</title>
        </head>
        <body>
        <h1>책 및 저자 관계 설정</h1>
        <label for="title">책:</label>
        <select id="title">
        <option value="Title 1">책 1</option>
        <option value="Title 2">책 2</option>
        <option value="Title 3">책 3</option>
        </select><br>

        <label for="author">저자:</label>
        <select id="author">
        <option value="Author A">저자 A</option>
        <option value="Author B">저자 B</option>
        <option value="Author C">저자 C</option>
        </select><br>

        <button onclick="assignAuthorToTitle()">관계 설정</button>

        <script>
        function assignAuthorToTitle() {
        const selectedTitle = document.getElementById('title').value;
        const selectedAuthor = document.getElementById('author').value;

        // 백엔드 PHP 스크립트 호출
        const xhr = new XMLHttpRequest();
        xhr.open("POST", "assign_author_to_title.php", true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
        alert(xhr.responseText);
        }
        };
        xhr.send("selectedTitle=" + selectedTitle + "&selectedAuthor=" + selectedAuthor);
        }
        </script>
        </body>
        </html>


        백엔드(PHP와 SQL)
        <?php
        // 데이터베이스 연결 정보 설정
        $servername = "localhost";
        $username = "username";
        $password = "password";
        $dbname = "mydb";

        // 데이터베이스 연결 생성
        $conn = new mysqli($servername, $username, $password, $dbname);

        // 연결 확인
        if ($conn->connect_error) {
        die("데이터베이스 연결 실패: " . $conn->connect_error);
        }

        $selectedTitle = $_POST['selectedTitle'];
        $selectedAuthor = $_POST['selectedAuthor'];

        // 책-저자 관계를 데이터베이스에 저장
        $insertRelationQuery = "INSERT INTO title_author_relations (title, author) VALUES ('$selectedTitle', '$selectedAuthor')";
        if ($conn->query($insertRelationQuery) === TRUE) {
        echo "책과 저자 관계가 설정되었습니다.";
        } else {
        echo "책과 저자 관계 설정 에러: " . $conn->error;
        }

        // 연결 종료
        $conn->close();
        ?>
        대화보기
        • 고롱박이
          N:M 관계 질문드립니다.

          사용자 입장에서 일일히 조인테이블에 그 관계를 한 행씩 입력해야하는걸까요?


          사용자 입장에서 조금 더 쉽게 입력할 수 있는 방법은 없는지 궁금합니다.
        • 당당
          2023.05.03
        • 강정34
          강의3에서 헷갈리는게 있어서 질문드려요ㅠ 맨더터리와 옵셔널은 서로 대척점에 있는것이라 생각드는데, 저자와 휴면자에 다이어그램이나 관계형데이터에서 그릴 때 저자는 휴면자가 될 수도 있고 안 될 수도 있으니 휴면자쪽에 있는 직선끝에는 ㅣ 짝대기가 없이 옵셔널 ●동그라미만 있어야 하는거 아닌가요?? 아니면 그냥 잘못그렸는데 못발견하신건지, 아니면 특별한 이유가 있는지 궁급합니다! 그리고 특정한 상황에서는 맨더터리와 옵셔널이 동시에 있을수도 있을까요?
        • 코드파괴자
          2023.04.07 완-

          마지막 영상이 조금 헷갈리네요.
          작성자 - 매핑 - 본문 이렇게 세 개의 테이블이 있을 때,
          작성자 - 매핑 = 작성자의 입장에서 글을 쓰는것(매핑)은 선택이기에 옵션이고, 여러개를 쓸 수도 있어서 새 발;
          매핑의 입장에서 작성자는 반드시(필수) 한 명은 존재해야 글이 존재하므로 직선, 카디 인것
          은 알겠습니다.

          근데,
          매핑 - 본문 = 매핑(작성자) 입장에서 본문은 쓸수도 있고 안쓸수도 있어서 옵션, 새 발;
          본문 입장에서 매핑은 반드시 존재해야 본문이 있기 때문에 직선, 필수 아닌가요?
        • ssss
          1대 n: 1쪽에 pk, n쪽에 fk주면서 활용
          1대1:pk,fk 잘 구분하여 적용
          n대m :mapping table 활용
        • 후토마끼
          22.10.06
        • 아캔두잇
          20220821 완료
        • toonfac
          220707 오후 4시 07분 완료
        • mirpia
          study
        • 오니
          2021.12.2. 감사합니다.
        • 가람마루
          똑같은 글의 제목과 내용을 다른 작성자도 작성가능하기 때문에 N:M관계인 것이 아니고요.

          하나의 글을 여러 명의 저자가 공동작성한 것으로 보는 겁니다.

          파트별로 작성했을 수도 있고, 여러 저자가 계속 수정할 수도 있겠지요.

          흔히 말하는 위키피디아나 나무위키를 생각하시면 되겠습니다.
          대화보기
          • 이마누
            완료
          • 이횹
            21.08.08.
          • 신혜원
            감사합니다^^
          • HOANY
            일반적으로 지금 제가 답글을 다는거와 같이 이 댓글은 여러명이 쓰는것이 아닌
            저혼자 쓰는것이므로 필살인생님의 말이 맞습니다.

            다만 위 강의에 내용을 생각해 본다면 topic은 책으로 생각하시면 편할것 같습니다.
            따라서 책은 혼자 또는 여러명의 저자가 참여하여 작성할 수 있으니 N:M 관계로 볼수있다고
            생각합니다!
            대화보기
            • 감사합니다
            • 김선경
              2021.02.21
            • 불닭볶음면
              2021. 01. 11
            • qoeqpeqoeoq
              좋은 지식 공유 감사합니다.
            • kmj5970
              감사합니다
            • 양민
              1회독 완료
            • jiyeong
              2020.08.25.
            • 김재원123
              재밌네요 감사합니다^^
            • 산노을
              감사!!!!!!!!!!!!!!!!!!!!!!
            • BePro
              감사합니다
            • Hans
              완료
            • ethan
              191121 완료
            • 이유진
              완료!
            • Ram Lee
              중요한 내용!
            • 가재준
              완료
            • 굼벵이
              완료
            • guswns1659
              맞습니다 ㅎㅎ 글 수정이 가능하다고 가정했어요!
              대화보기
              • mkxamkxa
                저는 author와 table의 관계를 작성자와 나무위키/위키피디아를 생각더니 이해가 잘 되었습니다.
                대화보기
                • wooky92
                  여기서는 한 글을 여러명이서 작성할 수 있어서 M:N관계로 정의했습니다. 필살인생님께서 맞게 이해하고 계십니다 :)
                  대화보기
                  • 필살인생
                    궁금한 점이 있습니다.

                    일반적인 게시판의 글을 생각하면 하나의 글의 작성자는 단 1명이고 작성자는 여러개의 글을 작성할 수 있으므로, author와 topic의 관계는 다대다 관계가 아니라 일대다 관계로 봐야 하는 것이 아닌지요?

                    강의내용의 author 와 topic의 다대다 관계라고 말씀하신 것은
                    혹시 하나의 글을 여러 작성자가 같이 작성할 수 있는 구조라고 이해하면 될까요?
                    제가 뭔가 잘못 이해하고 있는 것이 있다면 좀 짚어주시면 감사하겠습니다.

                    좋은 강의 항상 감사드립니다. :)