표를 설계하는 동안 일대일, 일대일 및 다대다 관계를 구현하는 방법은 무엇입니까?
예를 들어 표를 디자인하면서 일대일, 일대일, 다대다 관계를 구현하는 방법을 설명할 수 있는 사람이 있습니까?
일대일:참조된 테이블에 대한 외부 키 사용:
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 관계는 테이블 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 관계는 테이블 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 관계는 테이블 A의 하나의 레코드가 테이블 B의 하나 이상의 레코드와 관련된 경우에만 다대다 관계입니다.
다대다 관계를 설정하려면 테이블 A와 테이블 B의 기본 키를 모두 갖는 "클래스 학생 관계"라는 세 번째 테이블을 만듭니다.
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)
);
일대다
일대일 테이블 관계는 다음과 같습니다.
관계형 데이터베이스 시스템에서, 일대일 테이블 관계는 다음을 기반으로 두 테이블을 연결합니다.Foreign Key
하위 항목에 있는 열은 다음을 참조합니다.Primary Key
상위 테이블 행의.
표 에서 위의표다램에서그어이,서▁the,post_id
열post_comment
테이블이 있습니다.Foreign Key
의 post
ID 이블 IDPrimary Key
열:
ALTER TABLE
post_comment
ADD CONSTRAINT
fk_post_comment_post_id
FOREIGN KEY (post_id) REFERENCES post
일대일
일대일 테이블 관계는 다음과 같습니다.
관계형 데이터베이스 시스템에서, 일대일 테이블 관계는 다음을 기반으로 두 테이블을 연결합니다.Primary Key
아이의 열도 마찬가지입니다.Foreign Key
참조Primary Key
상위 테이블 행의.
그러므로, 우리는 하위 테이블이 공유한다고 말할 수 있습니다.Primary Key
상위 테이블과 함께.
위의 표 다이어그램에서,id
의 란post_details
테이블도 있습니다.Foreign Key
와의 관계post
테이블id
Primary Key
열:
ALTER TABLE
post_details
ADD CONSTRAINT
fk_post_details_id
FOREIGN KEY (id) REFERENCES post
다대다
다대다 테이블 관계는 다음과 같습니다.
관계형 데이터베이스 시스템에서 다대다 테이블 관계는 두 개의 부모 테이블을 두 개의 자식 테이블을 통해 연결합니다.Foreign Key
를 참조하는 열Primary Key
두 상위 테이블의 열.
위의 표 다이어그램에서,post_id
의 란post_tag
테이블도 있습니다.Foreign Key
와의 관계post
테이블 IDPrimary Key
열:
ALTER TABLE
post_tag
ADD CONSTRAINT
fk_post_tag_post_id
FOREIGN KEY (post_id) REFERENCES post
그리고.tag_id
의 란post_tag
테이블이 있습니다.Foreign Key
와의 관계tag
테이블 IDPrimary Key
열:
ALTER TABLE
post_tag
ADD CONSTRAINT
fk_post_tag_tag_id
FOREIGN KEY (tag_id) REFERENCES tag
일대일 관계:기본 키와 외부 키(외부 키와 관련된 기본 키는 하나의 레코드만 있음) 간의 관계입니다.이것은 일대일 관계입니다.
일대다(1-M) 관계:이는 기본 키 관계와 외부 키 관계 사이의 관계이기도 하지만 여기서는 여러 레코드와 관련된 기본 키입니다(예: 표 A에는 책 정보가 있고 표 B에는 책 한 권의 여러 출판사가 있습니다).
다 대 다(M-M): 다 대 다에는 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
'programing' 카테고리의 다른 글
Xcode: 프로세스 작업을 가져오지 못했습니다. (0) | 2023.05.07 |
---|---|
파이썬에 // 연산자에 해당하는 천장이 있습니까? (0) | 2023.05.07 |
Git: 추적된 파일 무시 (0) | 2023.05.07 |
스트림을 문자열로 변환하고 되돌리는 중 (0) | 2023.05.07 |
Postgre에서 타임스탬프를 자동으로 업데이트하려면 어떻게 합니까?SQL (0) | 2023.05.07 |