[SQL] 어떻게 일대일, 일대 설계 테이블 동안 관계 및 다 대다을 구현하는 방법?
SQL어떻게 일대일, 일대 설계 테이블 동안 관계 및 다 대다을 구현하는 방법?
사람이 몇 가지 예와 테이블을 설계하는 동안 일대일, 한 일대 다 및 다 대다 관계를 구현하는 방법을 설명 할 수 있습니까?
해결법
-
==============================
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.다음은 관계의 유형의 몇 가지 실제 사례는 다음과 같습니다
다음은 관계의 유형의 몇 가지 실제 사례는 다음과 같습니다
관계는 일대일 경우 및 테이블 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.하나 (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.일대 테이블 관계의 모습은 다음과 같습니다 :
일대 테이블 관계의 모습은 다음과 같습니다 :
관계형 데이터베이스 시스템의 일대 테이블 관계는 참조 부모 테이블 행의 기본 키 아이의 외래 키 열을 기반으로 두 테이블을 연결합니다.
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
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
'SQL' 카테고리의 다른 글
[SQL] SCOPE_IDENTITY (), 신원 (의 차이점은 무엇입니까), @@ IDENTITY 및 IDENT_CURRENT ()? (0) | 2020.03.12 |
---|---|
[SQL] SQL 서버에 두 개의 서로 다른 서버에서 데이터 선택 (0) | 2020.03.12 |
[SQL] 코드에 비해 저장 프로세서 수에 SQL을 유지하는 장점과 단점은 무엇입니까 [마감] (0) | 2020.03.12 |
[SQL] WHERE 절에 열 별칭을 참조 (0) | 2020.03.12 |
[SQL] WHERE HAVING 대 (0) | 2020.03.12 |