Programing

테이블을 디자인하면서 일대일, 일대 다 및 다 대다 관계를 구현하는 방법은 무엇입니까?

lottogame 2020. 4. 19. 13:50
반응형

테이블을 디자인하면서 일대일, 일대 다 및 다 대다 관계를 구현하는 방법은 무엇입니까?


누구나 예제가있는 테이블을 디자인하면서 일대일, 일대 다 및 다 대다 관계를 구현하는 방법을 설명 할 수 있습니까?


일대일 : 참조 테이블에 외래 키를 사용하십시오.

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하위 테이블 ( address) 의 여러 행 이 참조 된 테이블 ( student) 의 동일한 행과 관련 되지 않도록 외래 키 열 ( ) 에 고유 제한 조건을 설정해야합니다 .

일대 다 : 관계의 많은 부분에서 외래 키를 "일"쪽으로 다시 연결하십시오.

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


다음은 관계 유형의 실제 예입니다.

일대일 (1 : 1)

테이블 A의 한 레코드가 테이블 B의 최대 하나의 레코드와 관련된 경우에만 관계가 일대일입니다.

일대일 관계를 설정하려면 테이블 B의 기본 키 (고아 레코드 없음)가 테이블 A의 보조 키 (고아 레코드 있음) 여야합니다.

예를 들면 다음과 같습니다.

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);

일대 다 (1 : M)

테이블 A의 하나의 레코드가 테이블 B의 하나 이상의 레코드와 관련된 경우에만 관계는 일대 다 관계입니다. 그러나 테이블 B의 하나의 레코드는 테이블 A의 하나 이상의 레코드와 관련 될 수 없습니다.

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

예를 들면 다음과 같습니다.

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
);

다 대다 (M : M)

테이블 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)
);

일대일 관계 (1-1) : 기본 및 외래 키 간의 관계입니다 (외래 키와 관련된 기본 키는 하나의 레코드 만). 이것은 일대일 관계입니다.

일대 다 (1-M) 관계 : 이것은 기본 키와 외래 키 관계 사이의 관계이지만 여기서는 여러 레코드와 관련된 기본 키입니다 (예 : 테이블 A에는 책 정보가 있고 테이블 B에는 한 권의 책이 여러 개 있습니다).

대다 (MM) : 다 대다 (2 대)에는 2 차원이 포함되며 아래 샘플과 함께 자세히 설명합니다.

-- 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
)

참고 URL : https://stackoverflow.com/questions/7296846/how-to-implement-one-to-one-one-to-many-and-many-to-many-relationships-while-de

반응형