Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.10;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.016 c
3-30283
KPY
2003-03-22 10:23
2003.04.10
Помогите с конвертацией типа


3-30251
Yuraz
2003-03-20 10:42
2003.04.10
Мост перекачки данных FoxPro > Oracle с помощью чего организовать


1-30364
Дмитрий К.К.
2003-03-30 18:51
2003.04.10
---|Ветка была без названия|---


3-30318
tERRORist
2003-03-20 18:43
2003.04.10
Можно ли выбрать двунапр. набор данных используя dbExpress


3-30264
Silver_
2003-03-21 09:48
2003.04.10
LookupFields = КОШМАР на улицах Дельфи