Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL таблицы. Реализация. [D6, MSSQL, MySQL]


Страницы:   1 2

Сергей ©   (2003-03-18 14:35:00) 

как правильно реализовать в 3х (3!) таблицах взаимоотношения между субстанциями: книги, магазины, авторы? Книга может иметь несколько авторов, автор несколько книг, книга может продаваться в нескольких магазинах, магазин может продавать несколько книг. Нужно реализовать именно в трех таблицах.


Dr_Mike   (2003-03-21 19:38:00) [1]

Гм... Жутко интересует происхождение этого мифического числа 3 - почему именно в трех надо? Что это за указание такое свыше? :-)


Shirson   (2003-03-19 06:28:00) [2]

>Сергей

Чем тебе мой вариант не понравился? Все условия выполнены. 3 таблицы, все связи сохранены. То что я 2 других таблицы не стал приводить - так это вроде и так ясно.
В той же таблице "Книги" можно хранить и количество страниц и дату выпуска и ISBN и всё что угодно. В Авторах и Магазинах тоже самое.
Вот решение. В чём проблемы?


MsGuns   (2003-03-18 22:49:00) [3]

Присмотрелся, и у увидел художественное излишество в Шуркиной структуре. Зачем поле IdWriter ? Я бы сделал так:
4-я таблица описывает отношение автор написал книгу или участвовал в ее написании (соавтор):

id_avtor
id_book

5-я таблица описывает наличие в магазине книг (Каждая книга имеет инфу об ее авторах в 4-й таблице)

id_magazine
id_book

Я убрал цену, как несущественное с точки зрения межтабличных связей св-во. По сути имеется 2 таблицы и 3 справочника,- совершенно нормальный "джентльменский" набор для нормально спроектированной БД такого калибра.

ЗЫ. У меня возникло ощущение, что Сергей принципиально хочет получить решение в трех таблицах (поспорил ?)


MsGuns   (2003-03-18 22:38:00) [4]

>D (18.03.03 18:50)
В пятой таблице ошибка (думаю, Шурка Соловьев просто спешил и описАлся). Надо, конечно же, вторым полем Id_Book. И тогда данная модель удовлетворяет всем условиям нормализации и избыточности.

Вот только автору сабжа надо чтоб самолет летал с одним крылом и все тут ! Ему объясняют, что это будет как бы и не самолет, а дельтаплан или моноплан, но ЕМУ НАДО ТАК !
А если мастаки не знают как это сделать, то они и не мастаки, а м@#$ки !

Ув.Сергей ! Если в облом читать лит-ру и понять, что тебе хотят объяснить люди знающие, порассуждай хотя бы логически:

Есть 3 объекта, каждый со своими, не совместимыми с другими, характеристиками. Это УЖЕ три таблицы. Для организации ЛЮБОЙ связи между хотя бы двумя из них надо вводить какие-то сущности, которые где-то надо хранить. Ну не решается в математике система из уравнений, число которых меньше, чем кол-во неизвестных в них ! Хотя, конечно, можно выразить одно неизвестное через другое, но для БД это слабое утешение.


D   (2003-03-18 18:50:00) [5]

>5-я таблица описывает отношение книга, написанная автором продается в магазине:

>id_magazine
>id_writer
>cena

А если книгу написали 4 автора?

Скорее Id_Magazin
Id_Book
Cena, ...


Соловьев   (2003-03-18 18:15:00) [6]


> сугубо теоретический вопрос.

с точки зрения построения БД - нельзя.
А так хоть в 1-й, хоть в 2-х, ну и т.д.


Сергей   (2003-03-18 18:12:00) [7]

Мать моя женщина.. Нельзя просто ответить на вопрос? Если это возможно - показать как, если нет - ответить что невозможно.

Если это столь важно - все это мне нужно не для немедленной реализации. Можно считать что это сугубо теоретический вопрос. Ответ на который мне нужен сегодня. Вот и все.


Johnmen   (2003-03-18 17:55:00) [8]

>Соловьев © (18.03.03 17:50)

Он очень спешит...Ему некогда...:)


Соловьев   (2003-03-18 17:55:00) [9]

Можно в 3-х
просто надо соеденить 1-ю+4-ю+5-ю в одну таблицу. но учти если какая-нибудь Маня введет имя магазина "Дет. книга", а дальше "Детская книга", то прийдется туго...


Соловьев   (2003-03-18 17:50:00) [10]

2 Сергей
тогда надо читать основы построения БД: нормализация, концептуальная модель, логическая, физическая...


Сергей   (2003-03-18 17:48:00) [11]

В 5 таблиц все понятно.

Нужно в 3. Условие следует принимать как сказанное свыше.

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


Johnmen   (2003-03-18 17:28:00) [12]

>Соловьев © (18.03.03 16:21)

Идеологически самое верное ! :)))


MsGuns   (2003-03-18 16:31:00) [13]

>Shirson © (18.03.03 16:15)
Спасибо, что проиллюстрировал мой пост ;)))))


Соловьев   (2003-03-18 16:21:00) [14]

5 таблиц. 3 описывают справочники:
1-й

id_magazin
name_magazin

2-й

id_book
name_book

3-й

id_avtor
name_avtor

4-я таблица описывает отношение автор написал книгу:

id_writer
id_book
id_avtor

5-я таблица описывает отношение книга, написанная автором продается в магазине:

id_magazine
id_writer
cena


Shirson   (2003-03-18 16:15:00) [15]

А что мешает хранить в одной из таблиц (Книги), не уникальные данные?

Например "Мурзилка" продаётся в трёх магазинах и имеет двух авторов.

"Мурзилка" , "Петров" , ""
"Мурзилка" , "Иванов" , ""
"Мурзилка" , "" , "СоюзХренПечать"
"Мурзилка" , "" , "НеСоюзПечать"
"Мурзилка" , "" , "СоюзНоНеПечать"

И получай себе хоть авторов по книге, хоть книги по авторам, хоть магазины по книгам, хоть авторов по магазинам и т.д. :)


MsGuns   (2003-03-18 16:13:00) [16]

Примерно так: Таблица AllInOne
-Название книги
-ФИО автора
-Название магазина

Т.е. если у Петрова есть 4 книги, то будет 4 записи. Если одна из книг есть в 5-ти магазинах, то будет 4 доп.записи с теми же двумя первыми полями, и разными третьими. Ну и так далее.

Справочники организуются виртуально, т.е. выборка с группировкой. При добавлении нового, например, автора, в таблице появляется новая запись с пустыми 1 и 3 полями, которые потом заполнятся при отнесении какой-то книги к этому автору или при попадании ее в магазин.
Если добавятся еще сущности: цена, кол-во в магазине, инфа об изданиях и тиражах и т.д. - все выбросить и читать диагноз ниже.

Все работает исключительно выборками, ключей и индексов - никаких.

ИМХО, отстой и экстралюбительство по определению.

Диагноз: БД проработана слабо, нет нормального ТЗ и описания объекта (для кого или чего делается). Непонятно происхождение критичного условия "трех таблиц"



MsGuns   (2003-03-18 16:02:00) [17]

Все можно реализовать в одной (!) таблице. Но это уже клипперная идеология программеров-самоучек.


D   (2003-03-18 15:41:00) [18]

Да уж, надо бы как минимум в 5


Johnmen   (2003-03-18 15:16:00) [19]

"Скорее только кошки родятся" (c) Остап, а не базы делаются...(с)
"Хотели, как быстрее, а получилось..." (c) полный оцтой (с)


Сергей   (2003-03-18 15:03:00) [20]

У меня нет этой книги, а ответ нужен как можно скорее. Не мог бы ты приблизительно описать решение?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо