2011-04-24 2 views
1

이것은 온라인 라이브러리 카탈로그를위한 간단한 데이터베이스 모델입니다. 나는 가능하면 정상화하려고 노력하고있다. 내가 바꿔야하거나 다르게해야한다고 생각하니?내 간단한 서적 카탈로그 스키마를 표준화하는 데 도움이

예를 들어, 나는 테이블 저자에 대해 확신하지 못합니다. 그것은 또한 기본 키인 "name"컬럼을 하나 뿐이며 다른 테이블의 외래 키로도 사용합니다. 그게 좋은 습관인가요? 또한 하나의 열 대신에 두 개의 열 ("first_name"및 "last_name")을 넣어야합니까?

CREATE TABLE books (
    isbn VARCHAR2(13) NOT NULL PRIMARY KEY, 
    title VARCHAR2(200), 
    summary VARCHAR2(2000), 
    date_published DATE, 
    page_count NUMBER 
); 

CREATE TABLE authors (
    name VARCHAR2(200) NOT NULL PRIMARY KEY 
); 

CREATE TABLE books_authors_xref (
    author_name VARCHAR2(200), 
    book_isbn VARCHAR2(13), 
    CONSTRAINT pk_books_authors_xref PRIMARY KEY (author_name, book_isbn), 
    CONSTRAINT fk_books_authors_xref1 FOREIGN KEY (author_name) REFERENCES authors (name), 
    CONSTRAINT fk_books_authors_xref2 FOREIGN KEY (book_isbn) REFERENCES books (isbn) 
); 

CREATE TABLE book_copies (
    barcode_id VARCHAR2(100) NOT NULL PRIMARY KEY, 
    book_isbn VARCHAR2(13), 
    CONSTRAINT fk_book_copies FOREIGN KEY (book_isbn) REFERENCES books (isbn) 
); 
+0

을 단지 제안 -. 당신이 NOT NULL 필요가 없습니다 PRIMARY KEY로 선언 된 열에 대한 제한 조건. –

답변

4

합리적으로 표준화되었습니다. authors 테이블에 숫자 "author_id"를 추가하고 books_authors_xref 테이블에서 author_name 대신 해당 이름을 사용하여 동일한 이름을 가진 두 명의 작가를 다루는 등의 작업을 수행하고 저장할 방법을 변경할 수있게 해주는 관계를 사용합니다. 나중에 이름을 엉망으로 만들지 않고. :-)

2

나는 4 개의 테이블 모두가 5NF에 있다고 생각한다. 무엇이 라고 생각하십니까?

하지만. . .

작성자 이름은 고유하지 않습니다. authors 테이블에 ID 번호를 추가하면 행이 식별되지만 저자를 식별하지는 않습니다. 예를 들어 이름이 "Richard Knop"인 저자가 두 명 있다고 가정합니다. 작성자 이름에 기본 키 제약 조건이 있으므로 기존 표에 둘 모두를 입력 할 수 없습니다. ID 번호를 추가하여 문제를 해결하려고하면 결국 문제가 발생할 수 있습니다.

author_id author_name 
-- 
1   Knop, Richard 
2   Knop, Richard 

그 중 어느 쪽이 맞습니까? 어떻게 알았어?

+0

하지만 어떻게 그 문제를 해결할 수 있습니까? 다른 나라의 두 명의 문학 작가가 같은 이름을 가진 경우가 실제로 있습니다! 그것은 드문 일이지만 그것은 발생합니다. 어쩌면 거기에 생년월일을 추가해야할까요? –

+0

다른 사람과 자신을 구별하기 위해 사용하는 것을 추가해야합니다. –

2

Christo와 Catcall이 언급 한 "author_id"외에도 책 테이블의 기본 키에 "책"id "를 사용하는 것을 고려할 수도 있습니다. 게시/인쇄 된 모든 항목에 ISBN이있는 것은 아닙니다. 책이 ISBN보다 앞서거나 ISBN이 필요하지 않다고 생각한 사람이 인쇄했기 때문에 (예를 들어 내가 본 몇 가지 교육 자료와 같이).

+0

지역 도서관 중 하나에서 장난감,지도, DVD, CD, 녹음 된 서적, 포스터, 악보, 잡지, 신문, 그림 등을 확인할 수 있습니다. 오, 너도 책을 체크 아웃 할 수있어. –

0

나는 이것을 간단하게 시도한다. . 내가 만든 약간의 변화와 테이블을 만들 ... 작동 또한, ISBN 외국 키로 사용됩니다

CREATE TABLE book_copies 
(barcode_id VARCHAR2(100) NOT NULL PRIMARY KEY, 
    ISBN VARCHAR2(13), 
CONSTRAINT FK_BOOK_COPIES FOREIGN KEY (ISBN)REFERENCES books (isbn)) 
관련 문제