Хранение нескольких авторов книги, как ?

Модераторы: kdv, CyberMax

Ответить
EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Хранение нескольких авторов книги, как ?

Сообщение EvilsInterrupt » 25 фев 2007, 13:58

День вам добрый.

Прошу помощи, делаю для своих нужд ПО которое будет вести учет эл.книг. И испытываю некоторые сложности, потому прошу вашего участия и помощи.

Код: Выделить всё

CREATE TABLE EBook (
       id Integer NOT NULL,
       fk_author Integer NOT NULL,
       fk_subject Integer NOT NULL,
       fk_language Integer NOT NULL,
       name Varchar(40) NOT NULL,
       NumOfEdition Integer,
       url Varchar(200),
       CONSTRAINT PK_EBook PRIMARY KEY (id)
);

ALTER TABLE EBook ADD CONSTRAINT Author_EBook_FK FOREIGN KEY (fk_author) REFERENCES Author(id);
ALTER TABLE EBook ADD CONSTRAINT Language_EBook_FK FOREIGN KEY (fk_language) REFERENCES Language(id);
ALTER TABLE EBook ADD CONSTRAINT Subject_EBook_FK FOREIGN KEY (fk_subject) REFERENCES Subject(id);
При создании такой таблице, я могу учесть только одного автора книги, но ведь в жизни не всегда так! Очень хочется указать всех авторов.

Как это делают более опытные товарищи?

EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Сообщение EvilsInterrupt » 25 фев 2007, 14:40

На данную ситуацию есть вариант ввести дополнительное отношение Книги_и_авторы и таким образом организовать связь "многие ко многим" через эту сущность.

Но есть ли еще лучше способ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 фев 2007, 14:55

авторы - сущности сами по себе. книги - тоже сущности. книгу может написать несколько авторов. Автор может написать несколько книг. Налицо связь между авторами и книгами через промежуточную таблицу - много ко многим раскладывается в 1-м + м-1.
Задача примитивная, чего тут спрашивать, непонятно.

Кстати, subject тоже организован неправильно. однак книга может попадать под несколько категорий (если слово subject здесь использовано именно так).

Дальше - num of editions. Выпуск книги - это конкретное издание. Например, 4 издания Мир Interbase имеют свою обложку, и свой вариант диска, и свои правки. Т.е. по факту это не одна и та же книга. Если это в данной прикладной задаче важно, я бы сделал или нечто вроде ссылки на предыдущее издание, или еще что-нибудь. по крайней мере надо проверить, одинаковый ли ISBN у таких изданий.

EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Сообщение EvilsInterrupt » 25 фев 2007, 15:27

авторы - сущности сами по себе. книги - тоже сущности. книгу может написать несколько авторов. Автор может написать несколько книг. Налицо связь между авторами и книгами через промежуточную таблицу - много ко многим раскладывается в 1-м + м-1.
Задача примитивная, чего тут спрашивать, непонятно.
Ваши слова подтверждают мысль:
На данную ситуацию есть вариант ввести дополнительное отношение Книги_и_авторы
Под "Subject" Я понимаю "тематика", т.е. в ПО хочу иметь возможность просмотра всех эл.книг по базам данных, т.е. Книга Дейта попадает по тематику "Базы данных".

NumOfEdition - вы правильно поняли это номер редакции, к примеру я купил недавно К.Дж Дейта "Введение в системы базы данных" 8 Издание.

По поводу ISBN я еще думаю как организовать, толи сразу строкой, или же разбить на код страны, код издателя, код партии, котрольную цифру

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 фев 2007, 18:57

Под "Subject" Я понимаю "тематика", т.е. в ПО хочу иметь возможность просмотра всех эл.книг по базам данных, т.е. Книга Дейта попадает по тематику "Базы данных".
subject это тема. в данном случае более применимо понятие "категория".

если это приложение делается для себя, то не стоит так влезать в производственные детали.

EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Сообщение EvilsInterrupt » 25 фев 2007, 22:49

kdv
если это приложение делается для себя, то не стоит так влезать в производственные детали.
Делается для себя и прошу прощения за свои "умные" вопросы, но я хочу научиться проектировать на совесть БД. Сейчас усиленно читаю Дейта, и тренеруюсь по составлению запросов на sql-ex.ru. Однако на работе мне уже надо делать на совесть проекты, потому и прошу подталкивать меня на правильные мысли по проектированю БД.

зы:
Надеюсь, что сильно утруждаю своими вопросами

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 26 фев 2007, 00:11

модель может сильно зависеть от этих самых "производственных деталей". Основное при разработке БД - это "чутье", с одной стороны не переборщить, с другой стороны сделать так, чтобы можно было расширить модель новыми требованиями заказчика.
Дейт это хорошо, как теория, и даже местами как практика. Но есть "теория", а есть "производительность конкретной системы". И ради производительности теорию приходится или корректировать, или нарушать.

Ответить