복붙노트

[SQL] 어떻게 일대일, 일대 설계 테이블 동안 관계 및 다 대다을 구현하는 방법?

SQL

어떻게 일대일, 일대 설계 테이블 동안 관계 및 다 대다을 구현하는 방법?

사람이 몇 가지 예와 테이블을 설계하는 동안 일대일, 한 일대 다 및 다 대다 관계를 구현하는 방법을 설명 할 수 있습니까?

해결법

  1. ==============================

    1.일대일 : 참조 테이블을 사용하여 외래 키 :

    일대일 : 참조 테이블을 사용하여 외래 키 :

    student: student_id, first_name, last_name, address_id
    address: address_id, address, city, zipcode, student_id # you can have a
                                                            # "link back" if you need
    

    또한 참조 된 테이블 (학생)에서 같은 행에 관한에서 자식 테이블 (주소)에서 여러 행을 방지하기 위해 외래 키 열 (addess.student_id)에 고유 제한 조건을 넣어해야합니다.

    일대 다 : 사용 "일"쪽 다시 연결 관계의 여러 측면에 외래 키 :

    teachers: teacher_id, first_name, last_name # the "one" side
    classes:  class_id, class_name, teacher_id  # the "many" side
    

    다 대다 : 접합 테이블 (예)를 사용합니다 :

    student: student_id, first_name, last_name
    classes: class_id, name, teacher_id
    student_classes: class_id, student_id     # the junction table
    

    예 쿼리 :

     -- Getting all students for a class:
    
        SELECT s.student_id, last_name
          FROM student_classes sc 
    INNER JOIN students s ON s.student_id = sc.student_id
         WHERE sc.class_id = X
    
     -- Getting all classes for a student: 
    
        SELECT c.class_id, name
          FROM student_classes sc 
    INNER JOIN classes c ON c.class_id = sc.class_id
         WHERE sc.student_id = Y
    

  2. ==============================

    2.다음은 관계의 유형의 몇 가지 실제 사례는 다음과 같습니다

    다음은 관계의 유형의 몇 가지 실제 사례는 다음과 같습니다

    관계는 일대일 경우 및 테이블 A로부터 하나 개의 레코드는 테이블 B. 한 레코드의 최대 관련된 경우에만

    일대일 관계를 설정하려면 (NO 고아 레코드) 테이블 B의 기본 키 (고아 레코드) 테이블 A의 2 차 키를해야합니다.

    예를 들면 :

    CREATE TABLE Gov(
        GID number(6) PRIMARY KEY, 
        Name varchar2(25), 
        Address varchar2(30), 
        TermBegin date,
        TermEnd date
    ); 
    
    CREATE TABLE State(
        SID number(3) PRIMARY KEY,
        StateName varchar2(15),
        Population number(10),
        SGID Number(4) REFERENCES Gov(GID), 
        CONSTRAINT GOV_SDID UNIQUE (SGID)
    );
    
    INSERT INTO gov(GID, Name, Address, TermBegin) 
    values(110, 'Bob', '123 Any St', '1-Jan-2009');
    
    INSERT INTO STATE values(111, 'Virginia', 2000000, 110);
    

    관계는 일대이며, 테이블 A에서 하나 개의 레코드가있는 경우에만 경우 그러나 B. 테이블에서 하나 개 이상의 레코드 관련 테이블 B에 하나 개의 레코드는 테이블 A에서 하나 개 이상의 레코드에 관련 될 수 없다

    일대 다 관계를 설정하려면, 테이블 A의 기본 키 (이하 "하나"테이블) 테이블 B의 2 차 키 ( "다"테이블)이어야합니다.

    예를 들면 :

    CREATE TABLE Vendor(
        VendorNumber number(4) PRIMARY KEY,
        Name varchar2(20),
        Address varchar2(20),
        City varchar2(15),
        Street varchar2(2),
        ZipCode varchar2(10),
        Contact varchar2(16),
        PhoneNumber varchar2(12),
        Status varchar2(8),
        StampDate date
    );
    
    CREATE TABLE Inventory(
        Item varchar2(6) PRIMARY KEY,
        Description varchar2(30),
        CurrentQuantity number(4) NOT NULL,
        VendorNumber number(2) REFERENCES Vendor(VendorNumber),
        ReorderQuantity number(3) NOT NULL
    );
    

    관계는 다 대다 경우와 테이블 A에서 하나 개의 레코드가 테이블 B와 그 반대에있는 하나 개 이상의 레코드와 관련된 경우에만.

    다 대다 관계를 설정하려면, 테이블 A와 테이블 B를 모두 기본 키가됩니다 "ClassStudentRelation"라는 세 번째 테이블을 생성

    CREATE TABLE Class(
        ClassID varchar2(10) PRIMARY KEY, 
        Title varchar2(30),
        Instructor varchar2(30), 
        Day varchar2(15), 
        Time varchar2(10)
    );
    
    CREATE TABLE Student(
        StudentID varchar2(15) PRIMARY KEY, 
        Name varchar2(35),
        Major varchar2(35), 
        ClassYear varchar2(10), 
        Status varchar2(10)
    );  
    
    CREATE TABLE ClassStudentRelation(
        StudentID varchar2(15) NOT NULL,
        ClassID varchar2(14) NOT NULL,
        FOREIGN KEY (StudentID) REFERENCES Student(StudentID), 
        FOREIGN KEY (ClassID) REFERENCES Class(ClassID),
        UNIQUE (StudentID, ClassID)
    );
    
  3. ==============================

    3.하나 (1-1)의 관계에 대한 한 : 이 기본 및 외래 키 (foreign 키 하나만 기록 관련 기본 키) 사이의 관계이다. 이것은 하나 개의 관계이다.

    하나 (1-1)의 관계에 대한 한 : 이 기본 및 외래 키 (foreign 키 하나만 기록 관련 기본 키) 사이의 관계이다. 이것은 하나 개의 관계이다.

    대부분의 (1-M)의 관계에 대한 한 : 이것은 또한 다수의 레코드 (즉, 표 A 도서 정보가 표 B 한 책의 다수의 게시자가)에 관한 기본 및 외래 키 관계하지만 여기 기본 키 사이의 관계이다.

    (M-M) 많은에 많은 : 많은 많은에 두 개의 차원을 포함, 샘플 아래로 완전히 설명했다.

    -- This table will hold our phone calls.
    CREATE TABLE dbo.PhoneCalls
    (
       ID INT IDENTITY(1, 1) NOT NULL,
       CallTime DATETIME NOT NULL DEFAULT GETDATE(),
       CallerPhoneNumber CHAR(10) NOT NULL
    )
    -- This table will hold our "tickets" (or cases).
    CREATE TABLE dbo.Tickets
    (
       ID INT IDENTITY(1, 1) NOT NULL,
       CreatedTime DATETIME NOT NULL DEFAULT GETDATE(),
       Subject VARCHAR(250) NOT NULL,
       Notes VARCHAR(8000) NOT NULL,
       Completed BIT NOT NULL DEFAULT 0
    )
    -- This table will link a phone call with a ticket.
    CREATE TABLE dbo.PhoneCalls_Tickets
    (
       PhoneCallID INT NOT NULL,
       TicketID INT NOT NULL
    )
    
  4. ==============================

    4.일대 테이블 관계의 모습은 다음과 같습니다 :

    일대 테이블 관계의 모습은 다음과 같습니다 :

    관계형 데이터베이스 시스템의 일대 테이블 관계는 참조 부모 테이블 행의 기본 키 아이의 외래 키 열을 기반으로 두 테이블을 연결합니다.

    post_comment 테이블의 열 post_id를 상기 테이블 다이어그램에서 나타난 후 기본 키 ID 컬럼이있는 외래 키 관계를 갖는다 :

    ALTER TABLE
        post_comment
    ADD CONSTRAINT
        fk_post_comment_post_id
    FOREIGN KEY (post_id) REFERENCES post
    

    한 -에 - 하나의 테이블 관계의 모습은 다음과 같습니다 :

    관계형 데이터베이스 시스템에서, 일대일 테이블 관계 링크 두 테이블은 부모 테이블 행의 기본 키를 참조하는 외래 키 아이의 기본 키 열을 기반으로.

    따라서, 우리는 자식 테이블은 부모 테이블과 기본 키를 공유하는 것을 말할 수있다.

    위 표 다이어그램에서 post_details 테이블의 ID 열은 이후에 나타난 ID 기본 키 컬럼이있는 외래 키 관계를 갖는다 :

    ALTER TABLE
        post_details
    ADD CONSTRAINT
        fk_post_details_id
    FOREIGN KEY (id) REFERENCES post
    

    다 대다 테이블 관계의 모습은 다음과 같습니다 :

    관계형 데이터베이스 시스템에서, 다 대다 테이블 관계는 두 부모 테이블의 기본 키 열을 참조하는 두 개의 외부 키 컬럼을 포함하는 자식 테이블을 통해 두 부모 테이블을 연결합니다.

    위 표 다이어그램에서 post_tag 테이블의 post_id를 열은 후 나타난 ID 기본 키 컬럼이있는 외래 키 관계를 갖는다 :

    ALTER TABLE
        post_tag
    ADD CONSTRAINT
        fk_post_tag_post_id
    FOREIGN KEY (post_id) REFERENCES post
    

    그리고, post_tag 테이블의 tag_id 열은 태그 테이블 ID를 기본 키 열이있는 외래 키 관계가 있습니다 :

    ALTER TABLE
        post_tag
    ADD CONSTRAINT
        fk_post_tag_tag_id
    FOREIGN KEY (tag_id) REFERENCES tag
    
  5. from https://stackoverflow.com/questions/7296846/how-to-implement-one-to-one-one-to-many-and-many-to-many-relationships-while-de by cc-by-sa and MIT license