powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создал базу данных для освоения SQL
25 сообщений из 103, страница 4 из 5
Создал базу данных для освоения SQL
    #38745435
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, давайте жить дружно.
Когда я дорасту, я верну понятие физического состояния книги, также отделю сущность произведение от издания, введу понятие издательства, добавлю возможность нескольких авторов у одного произведения, нескольких произведений у одной книги (а что если это сборник сказок и их штук 100 в книге) и т. д.

Но пока что даже с моей примитивной БД я час бился вот над такой процедурой

create procedure FindPopularBooks ()
begin
select Book.bookName, Writer.fullName, count(*) from Book, Writer, TakenBooks where TakenBooks.bookId = Book.id and Book.authorId = Writer.id group by bookId order by count(*) desc;
end$$

есть еще пара процедур, которые я хотел бы, чтобы они были и чтобы они работали. Когда все будет готово, перейду из 2-го класса во 3-й. (1-й класс был у меня, когда я только и знал - как делать select, insert и update). И так постепенно закончу "школу".
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745464
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых: это не процедура, а запрос (то что он оформле в виде процедуры это его личное дело)
Во-вторых: форматирование ужасно.
В-третьих: Book.bookName, Writer.fullName должны быть в группировке
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745472
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257В-третьих: Book.bookName, Writer.fullName должны быть в группировке

Эээ, зачем?
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745485
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин Эээ, зачем? Потому что у ТС синтаксическая ошибка.
Я предположил что автору надо
Код: sql
1.
2.
3.
4.
5.
6.
select tb.bookId, b.bookName, w.fullName, count(*)
  from Book b, Writer w, TakenBooks tb
 where tb.bookId = b.id
   and b.authorId = w.id
 group by tb.bookId, b.bookName, w.fullName
 order by count(*) desc; 
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745515
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Кот Матроскин Эээ, зачем? Потому что у ТС синтаксическая ошибка.
Я предположил что автору надо
Код: sql
1.
2.
3.
4.
5.
6.
select tb.bookId, b.bookName, w.fullName, count(*)
  from Book b, Writer w, TakenBooks tb
 where tb.bookId = b.id
   and b.authorId = w.id
 group by tb.bookId, b.bookName, w.fullName
 order by count(*) desc; 



чем результат будет отличаться от просто
Код: sql
1.
2.
3.
...
 group by tb.bookId
...


Какой смысл нахождения в группировке неключевых атрибутов сущности, когда там уже есть первичный ключ этой сущности (ну или, как в данном случае, равное ему значение из другого поля выборки)?
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745525
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин чем результат будет отличаться от простоТем что мой запрос выполнится, а его вернет синтаксическую ошибку.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745530
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Кот Матроскин чем результат будет отличаться от простоТем что мой запрос выполнится, а его вернет синтаксическую ошибку.

а, из-за селекта - ну да, тогда надо, конечно.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745532
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257,

мой тоже выполняется. Нету никаких синтаксических ошибок. И еще я не очень понял вас по поводу форматирования.

Если вы про Ентер и табуляцию, то можно сделать и так

Код: sql
1.
2.
3.
4.
5.
6.
7.
create procedure FindPopularBooks ()
begin
	select Book.bookName, Writer.fullName, count(*)
        from Book, Writer, TakenBooks 
        where TakenBooks.bookId = Book.id and Book.authorId = Writer.id 
        group by bookId order by count(*) desc; 
end$$
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745536
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, похоже наступило время усложнения БД, т. к. я создал 4 таблицы и кучу процедур (по названиям примерно понятно, чем они занимаются). Все работает.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
drop procedure if exists createReader$$
drop procedure if exists createWriter$$
drop procedure if exists newWriter$$
drop procedure if exists newBook$$
drop procedure if exists addBooks$$
drop procedure if exists FindBookByName$$
drop procedure if exists FindBooksByWriter$$
drop procedure if exists FindReaderByName$$
drop function if exists isBookAvailable$$
drop procedure if exists ReaderTakesBook$$
drop procedure if exists ReaderReturnsBook$$
drop procedure if exists FindPopularBooks$$
drop procedure if exists FindPopularWriters$$
drop procedure if exists FindActiveReaders$$
drop procedure if exists WriteOffDamagedBook$$
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38745537
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

А у Вас какой сервер?
Если он умеет оптимизировать такую запись запроса - это хорошо, хоть и не соответствует стандарту SQL.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38746770
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин, MySQL

Но если вы считаете, что правильнее перечислить все поля в group by, то я так и сделаю.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38746843
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,

сорри, конечно

вернемся сюда 16546062



за это время

у вас в 'мировоззрении'
чото поменялосьже


мож тогда
обозачимся 'сначала'

сорри, конечно
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38755812
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут нарисовал схему БД (т. е. часть ее, посвященная книгам).
В центре внимания у нас находится "Литературное произведение". Он связано 1toMany с таблицей "Писатели", т. к. одно произведение могут написать несколько авторов.
И также оно связано отношением ManyToMany с таблицей "Книги", т. к. в одной книге могут быть много произведений и точно также 1 книга может состоять из нескольких томов.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38755862
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoОн связано 1toMany с таблицей "Писатели", т. к. одно произведение могут написать несколько авторов.

А один автор не может написать несколько произведений? Разумееется, нужно many-to-many.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38755883
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинА один автор не может написать несколько произведений? Разумееется, нужно many-to-many.
Да, конечно. Спс.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38755886
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В моей модели таблица авторы и книги никак не пересекаются. Они связаны только через таблицу "литературное произведение". Вам нравится такая модель ?
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756107
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "нравится"? Это правильно, они и не должны быть связаны. Более того, понятие "книга" размыто и неконкретно, нужно понятие "издание".
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756160
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
И еще «экземпляр издания» — тот, что на полке стоит.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756235
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вам такая реализация. Я завел 2 таблицы, которые занимаются связями ManyToMany.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table Writer (id int(10) auto_increment,  firstName varchar(20),  lastName varchar(20), fullName varchar(60), info varchar (1000), primary key (id));

create table WriterOfLiteraryWork(id int(10) auto_increment, authorId int(10), literaryWorkId int(10), primary key (id), foreign key (authorId) references Writer(id), 
	foreign key (literaryWorkId) references LiteraryWork(id));

create table LiteraryWork (id int(10) auto_increment, literaryWorkName varchar(100), primary key (id));

create table BookInfo (id int(10) auto_increment, literaryWorkId int(10), bookId int(10), primary key (id),  foreign key (bookId) references Book(id), 
	foreign key (literaryWorkId) references LiteraryWork(id));

create table Book (id int(10) auto_increment, bookName varchar(100), numberOfBooks int(10) default 1, currentNumberOfBooks int(10) default 1, primary key (id));
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756443
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь, подтвердите плиз, правильные ли я завел таблицы и правильно ли их связал. А то у меня из-за сомнений проект на паузе стоит.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756505
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo Кто-нибудь, подтвердите плиз, правильные ли я завел таблицы и правильно ли их связалДак напиши по русски что сказать-то хотел. А то 4 совершенно правильный ответ на вопрос 2*2, но неверный на вопрос 1+1.
Я бы посоветовал не связываться с изданием (пособие по укладке парашюта, издание второе исправленное) - в первом приближении можно считать новое издание новой книгой, но реализовать поэкземплярый учет.
Для начала определите атрибуты книги (или издания) и экземпляра книги.
Потом перепишите весь SQL в рамках новой концепции.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756517
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257,

я и не стал связываться с изданием. Я создал 5 таблиц, которые, как мне кажется соответствуют рисунку чуть выше. softwarer написал мне, что у меня все правильно на рисунке. Вопрос в том, правильно ли я сделал, что завел 5 именно таких таблиц.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38756532
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вкратце

Писатель имеет атрибуты - имя, фамилия, полное имя(оно же псевдоним) и краткую биографию (поле инфо)

Литературное произведение имеет название.

Книга имеет также название, количество книг в библиотеке и текущее количество.

На эти 3 понятия я хавел 3 таблицы.

+ 2 таблицы, которые связывают 1 и 2 таблицу и 2 и 3. Эти таблицы состоят из своего id и id соответствующих таблиц, которые указывыают, какие именно авторы писали это произведение, какие произведения написал этот автор и аналогично для таблицы, связывающей произведения и книги.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38759115
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoКто-нибудь, подтвердите плиз, правильные ли я завел таблицы и правильно ли их связал. А то у меня из-за сомнений проект на паузе стоит.

судя по этому - 16614727

вы - бежите 'впереди себя' ..

Вы - определитесь в Сутях
от самого - простого 'случая'
типа
что такое
Книга(....) -
Автор(....) -
и тд

начните
просто
в визарде
бзо-всяких криэйттэйбл

произведение : автор

потом - добавляйте

с каждой стороны


и пробуйте - пробуйте
до просветления
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38759129
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoВ моей модели таблица авторы и книги никак не пересекаются. Они связаны только через таблицу "литературное произведение". Вам нравится такая модель ?
Книга - физический носитель, вероятно. У нее, а не только у произведений, есть авторы. Например, художник оформил обложку) В общем, все очень сыро у Вас, пока.
...
Рейтинг: 0 / 0
25 сообщений из 103, страница 4 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создал базу данных для освоения SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]