Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Вниз

SQL таблицы. Реализация.   Найти похожие ветки 

 
Сергей   (2003-03-18 14:35) [0]

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


 
alex_bredin   (2003-03-18 14:51) [1]

готовое решение см. В.Фаронов "Программирование БД в Delphi" Питер,2002


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

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


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

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


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

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


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

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


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

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

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

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

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

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

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




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

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

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

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

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


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

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


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

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


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

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

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


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

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

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

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



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

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


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

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


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

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

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


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

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

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



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


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

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



 
D   (2003-03-18 18:50) [17]

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

>id_magazine
>id_writer
>cena

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

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


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

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

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

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

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


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

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

id_avtor
id_book

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

id_magazine
id_book

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

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


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

>Сергей

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


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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
4-30661
Radimir
2003-02-10 11:46
2003.04.10
перезагрузка компьютера


1-30341
ltolean
2003-03-31 15:40
2003.04.10
как оставить от Формы только заголовок?


4-30664
{{{KOTOS}}}
2003-02-10 17:15
2003.04.10
Как мне поймать событие


3-30211
volodya_
2003-03-20 17:21
2003.04.10
Перекодировка Win->Dos и Dos->Win


3-30209
slex
2003-03-19 22:02
2003.04.10
Сохранение изменений в БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский