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

Потихоньку осваиваю SQL. Владею им на самом начальном уровне, хотелось бы довести хотя бы до начально-среднего. Читаю книги.
И решил создать простенькую БД, в которую запихаю какое-то количество данных и буду экспериментировать с нею в процесс чтения той или иной книги.
База данных описывает библиотеку, в которой присутствует M книг N авторов (M>=N). Также есть читатели и каждый из них может взять на чтение несколько книг.
При этом я думаю на первое время сделать упрощение, что каждой книги очень много и несколько человек могут взять по экземпляру (иначе мне придется вводит поле, взята ли книга или хранится в библиотеке, или же поле, в котором хранится количество определенных книг в библиотеке, например Книга1 - 1 штука, Книга 2 - 3 штуки)

БД выглядит вот так. Зацените плиз, все ли верно с т. з. грамотного проектирования БД. Еще вопрос по поводу моих упрощений, может не стоит их делать, а сразу сделать самый трудный вариант (т. е. в таблицу Book ввести поле 'количество')?

create database Library;
use Library;

create Table Autors (id int(10) auto_increment, firstName varchar(10), lastName varchar(10), primary key (id));

create Table Book (id int(10) auto_increment, authorId int(10), bookName varchar(100), primary key (id), foreign key (authorId) references Autors(id));

create Table Readers (id int(10) auto_increment, firstName varchar(10), lastName varchar(10), primary key (id));

create table TakenBooks (id int(10) auto_increment, bookId int(10), readerId int(10), foreign key (bookId) references Book (id), foreign key (readerId) references readers (id), primary key (id));
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739809
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Таблицы "авторы" и "читатели" - суть одно и тоже. Можно совместить данные в одной таблице, добавив флаг ISREADER или ISAUTHOR. Заодно решишь вопрос - "может ли читатель быть писателем и наоборот" и избежишь дублирования данных.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739813
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,

Переделал. Все-таки добавил поле numberOfBooks, все-таки в настоящей библиотеке многие книги находятся не в единственном варианте

create database Library;
use Library;

create table Person (id int(10) auto_increment, firstName varchar(10), lastName varchar(10), isAuthor boolean default false, primary key (id));

create table Book (id int(10) auto_increment, authorId int(10), bookName varchar(100), numberOfBooks int(10) default 1, primary key (id), foreign key (authorId) references Person(id));

create table TakenBooks (id int(10) auto_increment, bookId int(10), readerId int(10), foreign key (bookId) references Book (id), foreign key (readerId) references Person (id), primary key (id));
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739828
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster Можно совместить данные в одной таблице, добавив флаг ISREADER или ISAUTHORА нужно ли. Добавить путаницу на ровном месте и для чего?
Наследование будет на следующем курсе (для продвинутых).

Geronemo База данных описывает библиотеку, в которой присутствует M книг N авторов (M>=N). Также есть читатели и каждый из них может взять на чтение несколько книг.Условие задачи неполное. Добавьте список запросов и действий читателей.

Таблица TakenBooks - как я понял это лог действий читателей - книга взята, книга возвращена. Добавте туда дату события.
Тогда поле количество будет вычисляемым - то бишь определятся из этого лога. (получается такой примитивный Склад)
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739830
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257DarkMaster Можно совместить данные в одной таблице, добавив флаг ISREADER или ISAUTHORА нужно ли. Добавить путаницу на ровном месте и для чего?
Наследование будет на следующем курсе (для продвинутых).


А зачем плодить сущности изначально?

P.S. Был проект - перерабатывали логическую структуры одной БД. Из ~100 таблиц убралось около 20 именно из-за объединения сущностей. И это при том, что "универсальными справочниками" не баловались.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739832
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257DarkMaster Можно совместить данные в одной таблице, добавив флаг ISREADER или ISAUTHORА нужно ли. Добавить путаницу на ровном месте и для чего?
Наследование будет на следующем курсе (для продвинутых).

Ладно, пусть будет 1 таблица, где будут и писатели и читатели. Все-таки логически каждый из них может быть и тем и тем. Ну и, чем сложнее БД, тем мне будет лучше, чтобы потренироваться на разного рода запросах.


Условие задачи неполное. Добавьте список запросов и действий читателей.

Тут я пока не знаю... Думаю будет очень много наиразнообразнейших запросов, даже самых извращенных, т. к. для меня это не реальная задача, а вымышленная с целью освоения SQL

Таблица TakenBooks - как я понял это лог действий читателей - книга взята, книга возвращена. Добавте туда дату события.
Тогда поле количество будет вычисляемым - то бишь определятся из этого лога. (получается такой примитивный Склад)
Да, можно добавить поля 'Дата, когда книг взята' not null и 'Дата, когда книгу вернули' (null, если еще не вернули).
Также мне похоже надо в таблицу Book добавить поле 'текущее количество книг в наличии'.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739833
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoВсем привет.

Потихоньку осваиваю SQL. Владею им на самом начальном уровне, хотелось бы довести хотя бы до начально-среднего. Читаю книги.
И решил создать простенькую БД, в которую запихаю какое-то количество данных и буду экспериментировать с нею в процесс чтения той или иной книги.
База данных описывает библиотеку, в которой присутствует M книг N авторов (M>=N). Также есть читатели и каждый из них может взять на чтение несколько книг.
При этом я думаю на первое время сделать упрощение, что каждой книги очень много и несколько человек могут взять по экземпляру (иначе мне придется вводит поле, взята ли книга или хранится в библиотеке, или же поле, в котором хранится количество определенных книг в библиотеке, например Книга1 - 1 штука, Книга 2 - 3 штуки)

БД выглядит вот так. Зацените плиз, все ли верно с т. з. грамотного проектирования БД. Еще вопрос по поводу моих упрощений, может не стоит их делать, а сразу сделать самый трудный вариант (т. е. в таблицу Book ввести поле 'количество')?

create database Library;
use Library;

create Table Autors (id int(10) auto_increment, firstName varchar(10), lastName varchar(10), primary key (id));

create Table Book (id int(10) auto_increment, authorId int(10), bookName varchar(100), primary key (id), foreign key (authorId) references Autors(id));

create Table Readers (id int(10) auto_increment, firstName varchar(10), lastName varchar(10), primary key (id));

create table TakenBooks (id int(10) auto_increment, bookId int(10), readerId int(10), foreign key (bookId) references Book (id), foreign key (readerId) references readers (id), primary key (id)); КАЖДАЯ книга (ея экземпляр) - имеет свой идентификатор
типа - ИнвНомер (..на 17-й странице..)



простенько

мэйн тблка - Визит (когда- кто и тд... )

под неё
дитэйл тблка (ПК-ФК)
в которой -
- экземпляр'ы'..
чо взял Читатель....

соответственно - разнообразные Статусы
типа - Должник, Утеря..
и тп..


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

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

Хочу содать таблицу

Book
с полями
id int(10) auto_increment
authorId int(10)
bookName varchar(100) - тут у меня вопрос, что если в названии книги будет 110 символов.
numberOfBooks int(10) default 1
currentNumberOfBooks int(10) - тут вопрос, как сделать так, чтобы по дефолту значение было равно значению колонки numberOfBooks
primary key (id), foreign key (authorId) references Person(id)
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739851
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster А зачем плодить сущности изначально? Потому что это РАЗНЫЕ сущности - писатели пишут книги, а читатели пользуются библиотекой. Общего у них только принадлежность к людям.

[offtopic]
DarkMaster Из ~100 таблиц убралось около 20 именно из-за объединения сущностей. И это при том, что "универсальными справочниками" не баловались.У вас странные критерии оптимизации. Из двух таблиц сделали одну.
Вот недостатки навскидку
1 увеличили вероятность ошибки (оптимизатор не заругается на левую таблицу)
2 убрали возможность дать разные права
3 блокировка таблицы (типа индексы перестоить) блокирует обе таблицы
4 полный скан будет читать лишние страницы
А где выгода?
Divide et impera - еще римляне говорили.
[/offtopic]

Geronemo Думаю будет очень много наиразнообразнейших запросовБаза это ответ на вопрос. Без условий задачи ответ смысла не имеет. Например 42 это правильный ответ?
Поставьте задачу, пропишите все условия как если бы их рассказал заказчик. Потом исходя из условий проектируйте базу. Не запрягайте телегу впереди лошади.

Geronemo с целью освоения SQLИщите упражнения по SQL. Там будут стандартные условия и ответ с которым можно будет сличить.

Geronemo Также мне похоже надо в таблицу Book добавить поле 'текущее количество книг в наличии'. Это уже называется денормализация - нарушение принципа SPOT (по запросу лога взятий/возвратов количество будет одно, в поле другое - кому верить?) Денормализация будет на следующем курсе.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739857
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo....Ладно, пусть будет 1 таблица, где будут и писатели и читатели....
ну,
пришёл к Вам живой Классик
и взял чо-нить 'из своего'

а потом
вернул...

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

use Library;

drop procedure if exists newPerson;

create procedure newPerson ( firstName varchar(20), lastName varchar(20), isAuthor boolean)
begin
insert into Person (firstName, lastName, isAuthor) values (firstName, lastName, isAuthor);
end

Красненьким подсвечено, что ошибка там где isAuthor);
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739860
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1001 КАЖДАЯ книга (ея экземпляр) - имеет свой идентификатор
типа - ИнвНомер (..на 17-й странице..)А вот это совершенно не факт. И как раз для таких моментов нужен заказчик.
2 Geronemo
Давайте я вам помогу
Итак имеем библиотеку - книги, авторы, читатели

Действия (запросы)
библиотекарь добавляет книгу (или экземпляры) в библиотеку
читатель ищет книгу
читатель берет книгу
читатель возвращает книгу
читатель смотрит наличие книги в библиотеке
читатель смотрит кому выдавали экземпляры книги.
библиотекарь списывает экземпляр книги.

Geronemo Кстати, появился вопрос по синтаксису.Идите в форум для вашей СУБД
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739872
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot SERG1257]DarkMaster Geronemo Также мне похоже надо в таблицу Book добавить поле 'текущее количество книг в наличии'. Это уже называется денормализация - нарушение принципа SPOT (по запросу лога взятий/возвратов количество будет одно, в поле другое - кому верить?) Денормализация будет на следующем курсе.
Ну на практике существует такое понятие, как книга потеряна/украдена. Допустим раз в год производится переучет и эти данные приводятся друг к другу.
Думаю полю 'текущее количество книг в наличии' можно доверять больше, т. к. библиотекарь пошел и посмотрел, сколько их на полке по факту.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739878
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG12571001 КАЖДАЯ книга (ея экземпляр) - имеет свой идентификатор
типа - ИнвНомер (..на 17-й странице..)А вот это совершенно не факт. И как раз для таких моментов нужен заказчик.
2 Geronemo
Давайте я вам помогу
Итак имеем библиотеку - книги, авторы, читатели

Действия (запросы)
библиотекарь добавляет книгу (или экземпляры) в библиотеку
читатель ищет книгу
читатель берет книгу
читатель возвращает книгу
читатель смотрит наличие книги в библиотеке
читатель смотрит кому выдавали экземпляры книги.
библиотекарь списывает экземпляр книги.

Geronemo Кстати, появился вопрос по синтаксису.Идите в форум для вашей СУБД
во-во
это - движняк
где надо - он - во времени...
автор...Итак имеем библиотеку - книги, авторы, читатели...прально,
а так же примитивно
- красиваыеБиблиотекарши,помещение, стеллаж, полка...и тд


SERG1257 ..А вот это совершенно не факт. И как раз для таких моментов нужен заказчик...

:))
пылится себе где-то некий экземпляр
и даже не знает,
что
есть какой-то там - Заказчик
и не только...
..(((
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739934
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG12571001 КАЖДАЯ книга (ея экземпляр) - имеет свой идентификатор
типа - ИнвНомер (..на 17-й странице..)А вот это совершенно не факт. И как раз для таких моментов нужен заказчик.
2 Geronemo
Давайте я вам помогу
Итак имеем библиотеку - книги, авторы, читатели

Действия (запросы)
библиотекарь добавляет книгу (или экземпляры) в библиотеку
читатель ищет книгу
читатель берет книгу
читатель возвращает книгу
читатель смотрит наличие книги в библиотеке
читатель смотрит кому выдавали экземпляры книги.
библиотекарь списывает экземпляр книги.

Geronemo Кстати, появился вопрос по синтаксису.Идите в форум для вашей СУБД

Попробую тоже придумать какой-то список действий
1. В библиотеку пришел новый человек
2. В библиотеку поступила новая книга (n-экземпляров, возможно она уже есть в кол-ве m-экземпляров)
3. Читатель ищет книгу (по разным параметрам, по автору, какое-то конкретное произведение и т. д.)
4. Читатель берет книгу почитать
5. Читатель возвращает книгу.
6. Библиотекарь смотрит кому выдавали экземпляры книги (каким читателям, сколько всего раз и т. д.)
7. Библиотекарь смотрит как часто берут книги того или иного автора (тут тоже можно посмотреть сколько все в сумме брали и сколько каждый читатель в отдельности).
8. Библиотекарь списывает экземпляр книги (если был 1, то будет 0, запись о книге не удаляем).
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38739951
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo ...

Попробую тоже придумать какой-то список действий
1. В библиотеку пришел новый человек
2. В библиотеку поступила новая книга (n-экземпляров, возможно она уже есть в кол-ве m-экземпляров)

сначала как можно правильнее
построить БД

а уж потом
пусть
3. Читатель ищет книгу (по разным параметрам, по автору, какое-то конкретное произведение и т. д.)
4. Читатель берет книгу почитать
5. Читатель возвращает книгу.
6. Библиотекарь смотрит кому выдавали экземпляры книги (каким читателям, сколько всего раз и т. д.)
7. Библиотекарь смотрит как часто берут книги того или иного автора (тут тоже можно посмотреть сколько все в сумме брали и сколько каждый читатель в отдельности).
8. Библиотекарь списывает экземпляр книги (если был 1, то будет 0, запись о книге не удаляем).
Вы
не спеша
определитесь
- в сутях
- в процессах
...


порисуйте их ...



правильно будет
периодически поспать (перекурить)
во сне еще много-чо приснится...))

и, эта,
пробуй-пробуй-пробуй
...до некоего просветления
;))

...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740007
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo Попробую тоже придумать какой-то список действийВот и пишите SQL для каждого действия. Потом можно напихать данных побольше и задумыватся об индексировании.
Дальше пусть заказчик изменит свою точку зрения? согласно 1001 и потребует учитывать книги поштучно. Переделайте базу и перепишите SQL.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740023
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1001правильно будет
периодически поспать (перекурить)
во сне еще много-чо приснится...))

и, эта,
пробуй-пробуй-пробуй
...до некоего просветления
;))



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

заказчик опять же какой то...


сам
в собственно-придуманном
потырыкается пусть

...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740104
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257.
Вот недостатки навскидку
1 увеличили вероятность ошибки (оптимизатор не заругается на левую таблицу)
2 убрали возможность дать разные права
3 блокировка таблицы (типа индексы перестоить) блокирует обе таблицы
4 полный скан будет читать лишние страницы


1) Давайте сначала доберемся до SQL запросов, ага? Тогда и будем учить оптимизатор.
2) О каких разных права вы говорите?
3) Стоп. Я из 2-х таблиц сделал одну. Где вторая? Или вы сами с собой спорите? И перестройка индекса - оно конечно да, операция ежечасная.
4) А поподробнее можно? При правильных запросах и индексах и полный скан?

P.S. А можно все-таки ответить на вопрос - вот есть два человека - Азимов и Брэдбери - оба они авторы - могут ли они читать произведения друг друга?

P.P.S. Интересно, как с таким подходом вы будете каталог библиотеки с иерархией жанров строить ;)
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740110
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[оффтопик]
>1) Давайте сначала доберемся до SQL запросов, ага?
Ага и в КАЖДЫЙ запрос не забудьте добавить условие ISREADER или ISAUTHOR, а потом взгляните на код и сравните с разными таблицами. Где код чище, и вероятность облажатся меньше.

>2) О каких разных права вы говорите?
Я даю права одному пользователю на одну таблицу, другому на другую. Вы даете права обоим пользователям на обе таблицы

>3) Стоп. Я из 2-х таблиц сделал одну. Где вторая? Или вы сами с собой спорите?
Я провожу обслуживание большой таблицы - вторая доступна. У пока долгое обслуживание обьединенной таблицы не кончится заблокированы все.

>4) А поподробнее можно? При правильных запросах и индексах и полный скан?
Дополнительного скана не будет только при запросе одной строки. При любых других придется читать лишние страницы.

>P.S. А можно все-таки ответить на вопрос - вот есть два человека - Азимов и Брэдбери - оба они авторы - могут ли они читать произведения друг друга?
Заведу таблицу ЛЮДИ и еще две таблицы читатели со ссылкой на ЛЮДИ_id и писатели со ссылкой на ЛЮДИ_id

>P.P.S. Интересно, как с таким подходом вы будете каталог библиотеки с иерархией жанров строить ;)
Сформулируйте задачу постою.

А теперь в порядке ответной любезности, назовите выгоды объединения таблиц.
[/оффтопик]
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740114
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257[оффтопик]
>1) Давайте сначала доберемся до SQL запросов, ага?
Ага и в КАЖДЫЙ запрос не забудьте добавить условие ISREADER или ISAUTHOR, а потом взгляните на код и сравните с разными таблицами. Где код чище, и вероятность облажатся меньше.


Облажатся можно везьде. По поводу чистоты кода и прочего - фигня-с... Мы живем в реальном мире.

SERG1257>2) О каких разных права вы говорите?
Я даю права одному пользователю на одну таблицу, другому на другую. Вы даете права обоим пользователям на обе таблицы


У меня ОДНА таблица. Мне незачем раздавать права на несколько таблиц. Вы усложнили админ. процедуру по раздаче прав. Еще один повод для облажаться, если с правами будет что-то не так.

SERG1257>3) Стоп. Я из 2-х таблиц сделал одну. Где вторая? Или вы сами с собой спорите?
Я провожу обслуживание большой таблицы - вторая доступна. У пока долгое обслуживание обьединенной таблицы не кончится заблокированы все.


Сервер? Вы уверены, что сказанное вами истина в последней инстанции? Позвольте напомнить вам - есть блокировочники, а есть версионники.

SERG1257>4) А поподробнее можно? При правильных запросах и индексах и полный скан?
Дополнительного скана не будет только при запросе одной строки. При любых других придется читать лишние страницы.


Ну будет как минимум скан по индексу, но от этого никуда не денешся при любом расскладе. Вы же говорили о полном скане, не так ли?

SERG1257>P.S. А можно все-таки ответить на вопрос - вот есть два человека - Азимов и Брэдбери - оба они авторы - могут ли они читать произведения друг друга?
Заведу таблицу ЛЮДИ и еще две таблицы читатели со ссылкой на ЛЮДИ_id и писатели со ссылкой на ЛЮДИ_id


Занафига? А потом заведете таблицы ЖЕНЩИНЫ и МУЖЧИНЫ? И куда ж ваша красота запросов денется? Это просто ж простор для "облажаться" ;) Может все-таки во избежание сумбура стоит разделить понятия "сущность" и "аттрибут"?

SERG1257>P.P.S. Интересно, как с таким подходом вы будете каталог библиотеки с иерархией жанров строить ;)
Сформулируйте задачу постою.


Дык предложил-же - постройте каталог для библиотеки.

SERG1257А теперь в порядке ответной любезности, назовите выгоды объединения таблиц.
[/оффтопик]

Постарался назвать.

Ну хотя бы то, что идет оперирование одной сущностью - "человек". И добавление нового атрибута (я предложил "пол") никак не усложняет жизнь.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740116
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster Мне незачем раздавать права на несколько таблиц. Вы усложнили админ. процедуру по раздаче прав.Зачем тогда останавливаться. Пусть у вас все пользователи будут иметь все права. И администрирование будет упрощено, так?

DarkMaster Позвольте напомнить вам - есть блокировочники, а есть версионники. Но суть проблемы вы уловили.

DarkMaster Ну будет как минимум скан по индексу, но от этого никуда не денешся при любом расскладе. Вы же говорили о полном скане, не так ли? Конечно. Но у меня идет скан таблиц или индексов ОДНОЙ таблицы, а у вас объединенной из двух.

DarkMaster Занафига?Потому что это типовой прием для реализации наследования. Вас способ - запихать в одну таблицу тоже годится, но для задач библиотеки (тем более учебной задачи) недостатки перевешивают достоинства.

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

DarkMaster Постарался назвать.Э нет. Вы пока только ругали мои аргументы, но не привели своих.

DarkMaster Ну хотя бы то, что идет оперирование одной сущностью - "человек"В задаче библиотеки сущности ДВЕ - читатели и писатели. Книжки читатель берет, а писатель пишет. У них совершенно разные атрибуты.

Давайте прекратим оффтопик. Я предпочитаю все разложить по полочкам, вы любите валить все в кучу, вряд ли мы что либо докажем ТС.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740134
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> В задаче библиотеки сущности ДВЕ - читатели и писатели.

Вообще говоря, одна сущность.

На месте автора вопроса я бы пошёл другим путём: взял бы готовый пакет для управления библиотекой и попытался разобраться в структуре базы данных. Заодно бы получил полезные представления о классификации, кодировании и пр.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740143
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterGeronemo,

Таблицы "авторы" и "читатели" - суть одно и тоже. Можно совместить данные в одной таблице, добавив флаг ISREADER или ISAUTHOR. Заодно решишь вопрос - "может ли читатель быть писателем и наоборот" и избежишь дублирования данных.

кроме этого, авторов у книги может быть много, а тут только одна.

по читателям и писателям - атрибуты у них очевидно разные будут, по авторам в сторону автобиографии, по читателям в сторону идентификации личности и установления места жительства и способов оплаты штрафов. Там паспорт и т. п. .
Паспорт - еще одна долгая история, паспортов там дофига всяких...

У авторов кстати имен много, псевдонимы...
так что если и сводить в одно читателей и писателей, то надо использовать наследование и сильно думать...


Еще очевидно надо использовать экземпляры книг, у каждой книги есть инвентарный номер и т.д.

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

Потому что это РАЗНЫЕ сущности - писатели пишут книги, а читатели пользуются библиотекой. Общего у них только принадлежность к людям.


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

еще, я вспомнил, что псевдоним может быть один на группу авторов (Козьма Прутков), и индивидуально на автора (Илья Ильф и Евгений Петров, второе - псевдоним).

Так что я уже против наследования авторовов и людей, надо наследовать авторов и псевдонимы.

а вообще, библиотека - достаточно сложная предметная область. можно делать частную библиотеку а не публичную, будет немного проще.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740151
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemocreate table Book (id int(10) auto_increment, authorId int(10), bookName varchar(100), numberOfBooks int(10) default 1, primary key (id), foreign key (authorId) references Person(id));
не очень понимаю, почему в таблице книг находится id автора, ибо ходят слухи, что не все книги пишутся в одиночку, а некоторые вообще под редакцией неких лиц, которые авторами-то и не являются собственно.
Geronemocreate table TakenBooks (id int(10) auto_increment, bookId int(10), readerId int(10), foreign key (bookId) references Book (id), foreign key (readerId) references Person (id), primary key (id));
Дата взятия книги как уже обращали внимание, просто необходима, ибо при существующей схеме второй раз книжку читателю не взять на руки.

Ну и конечно, в схеме библиотеки должны присутствовать не только писатели и читатели. Я там ещё библиотекарей постоянно встречаю. Вечно снуют туда-сюда. И однако не лишним было бы знать кем выдана книга.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740160
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю участникам дискуссии слегка притормозить - это УЧЕБНЫЙ проект, автор выбрал библиотеку как знакомую ему (внешне) сферу деятельности.
Поэтому, Geronemo, - модифицируй базу чтобы учитывать множество авторов у книги.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740161
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterSERG1257.
Вот недостатки навскидку
1 увеличили вероятность ошибки (оптимизатор не заругается на левую таблицу)
2 убрали возможность дать разные права
3 блокировка таблицы (типа индексы перестоить) блокирует обе таблицы
4 полный скан будет читать лишние страницы


1) Давайте сначала доберемся до SQL запросов, ага? Тогда и будем учить оптимизатор.
2) О каких разных права вы говорите?
3) Стоп. Я из 2-х таблиц сделал одну. Где вторая? Или вы сами с собой спорите? И перестройка индекса - оно конечно да, операция ежечасная.
4) А поподробнее можно? При правильных запросах и индексах и полный скан?

P.S. А можно все-таки ответить на вопрос - вот есть два человека - Азимов и Брэдбери - оба они авторы - могут ли они читать произведения друг друга?

P.P.S. Интересно, как с таким подходом вы будете каталог библиотеки с иерархией жанров строить ;)
брадцы, вы об чём...)

ТС - на 'этой земле' делает первые шаги...

пусть поспотыкается
набъёт шишек..

и
это - правильно
и
полезно же
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740178
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1001, если внимательно прочитать сообщения, то в выделенной Вами цитате разговор далёк от библиотеки автора темы. Они там реальный случай с объединением кучи таблиц рассматривали. Так что обсуждение перестройки индексов там вполне уместно
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740198
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.Fontaine1001, если внимательно прочитать сообщения, то в выделенной Вами цитате разговор далёк от библиотеки автора темы. Они там реальный случай с объединением кучи таблиц рассматривали. Так что обсуждение перестройки индексов там вполне уместносогласен

но ТС-то клюет 'навсё'
мой посыл был именно в этом смысле
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740237
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Предлагаю участникам дискуссии слегка притормозить - это УЧЕБНЫЙ проект, автор выбрал библиотеку как знакомую ему (внешне) сферу деятельности.
Поэтому, Geronemo, - модифицируй базу чтобы учитывать множество авторов у книги.

Ну и что?
На учебных проектах и нужно учиться анализировать предметную область.
А именно этого автор топика и не сделал сходу.
Очевидная мысль о множестве авторов у книги ему в голову не пришла, хотя в IT книги большей частью написаны именно в соавторстве.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740460
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivНу и что?
На учебных проектах и нужно учиться анализировать предметную область.
А именно этого автор топика и не сделал сходу.
Очевидная мысль о множестве авторов у книги ему в голову не пришла, хотя в IT книги большей частью написаны именно в соавторстве.

Я тут недавно в рамках процесса повторения/вспоминания синтаксиса java делал небольшой проект. Начал с того, что консольное приложение посылает данные Сервлету, тот должен запуститься и вернуть какой-то ответ. Далее я стал записывать запросы в файл. Потом у меня появились запросы разных типов, для которых нужен свой обработчик. Потом я стал сохранять данные в БД. Потом я перестроил БД так, чтобы разбить запросы от клиентов на 3 стадии - запрос получен и сохранен, запрос (т. е. пакет запросов данного типа) передан на обработку, запрос обработан и отправлен в архив. Для этого пришлось вводить несколько потоков, а также решать вопрос целостности данных. Ну и потом я переделал проект под maven и JPA.
И это при том, что с java я когда-то работал достаточно много. 1-я половина ТЗ была мне дана знакомым, а потом я уже сам развернулся.

Здесь же с SQL я знаком на уровне select ... from .... where, create, update ... where.
Т. ч. я решил начать с малого, чтобы просто хоть как-то работало. В процессе я все равно все переделаю и надобавляю кучу разных вариантов. Сейчас у меня голова от них пухнет. Может быть несколько авторов, могут быть однофамильцы, книги могут быть не возвращены, причем вероятно есть какие-то злостные должники и т. д. Также возможны разные библиотекари, как внимательные и ответственные, так и нет.

На данный момент БД, я немного подумав, решил обратно разделить писателей и читателей. В конце концов, если писатель придет в библиотеку что-нибудь взять, мы можем записать его как читателя. Ведь в жизни так и происходит. Я написал книгу, она лежит в библиотеке. Я прихожу туда и мне говорят, вы тут в первый раз ? Я говорю Да и на меня заводят карточку или запись в БД, если библиотека современная. Никто же меня не спрашивает, а не автор ли я какой-либо книги, давайте вашу карточку пометим особым цветом, а я ведь могу еще и соврать или писать под псевдонимом.
В общем пусть будут пока и Читатели и Писатели. Более того, я подумываю у писателей объединить firstName и lastName в fullname.
Иначе как мне именовать Эрик Мария Ремарка и Френсис Скотт Фитцжеральда. Это реально проблема, с которой я уже столкнулся.
Хотя можно оставить firstName и lastName, а fullname по дефолту firstName + lastName и при созданиии Писателя пользоваться не insert into, а процедурой addWriter (firstName, lastName, fullName (maybe null));
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740496
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoВ общем пусть будут пока и Читатели и Писатели. Более того, я подумываю у писателей объединить firstName и lastName в fullname.
Иначе как мне именовать Эрик Мария Ремарка и Френсис Скотт Фитцжеральда. Это реально проблема, с которой я уже столкнулся.
Хотя можно оставить firstName и lastName, а fullname по дефолту firstName + lastName и при созданиии Писателя пользоваться не insert into, а процедурой addWriter (firstName, lastName, fullName (maybe null));

Что-то типа того

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create procedure newWriter (in firstName varchar(20),  lastName varchar(20), fullName varchar(60), out id int(10))
begin
	Declare fName varchar(60);

	if (fullName = null)
	then
		Set fName = firstName + ' ' + lastName;
		insert into Writer (firstName, lastName, fullName) values (firstName, lastName, flName);
	else
		insert into Writer (firstName, lastName, fullName) values (firstName, lastName, fullName);
	end if;

	Set id = LAST_INSERT_ID(); 
end$$
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740515
Триггерман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257DarkMaster А зачем плодить сущности изначально? Потому что это РАЗНЫЕ сущности - писатели пишут книги, а читатели пользуются библиотекой. Общего у них только принадлежность к людям. Да-а-а-а ... я чувствую вы научите новичка разрабатывать БД ...
А сущность "сотрудник библиотеки" вы в ещё одной таблице будете хранить ?
Вы так договоритесь до того, что книги с зелёной обложкой вы будете хранить в одной таблице, а книги с синей обложкой - в другой.
Не, ну а чо, обложки-то разного цвета...
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740607
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Постараюсь обьяснить свою идею общей таблицы для писателей/читателей и прочего:
- все они имеют общие аттрибуты (ФИО, пол и т.п), использование которых диктуется только необходимостью (ну пусть будет таблица PEOPLE)
- все могут выступать в минимум 2-х ипостасях - и как писатель и как читатель
- книга имеет ссылку минимум на одного автора, или на нескольких авторов (соотношение один ко многим)
- журнал приема-выдачи - хранит ссылку на читателя и книгу (соотношение один к одному)
- псевдонимы, коллективные псевдонимы - это дополнительная таблица, которая содержит связку один ко многим (псевдоним - ссылки на авторов)
- ссылка на автора, ссылка на читателя - есть ID из PEOPLE.

Как минимум такой подход позволяет манипулировать только одной сущностью. Например изначально была запись "Э. Ремарк". Мы только в одном месте изменим ее на "Эрих Мария Ремарк" и у нас во всех результатах запросов появится именно Эрих Мария Ремарк. Вне зависимости от того, писатель это, читатель, член авторского коллектива или рецензент. И нам не нужно тараканить по базе, меняя эту инфу в разных таблицах.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740692
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster, может тогда сделать так ?

1. Таблица People, в ней как можно больше данных о человеке, кто, откуда, пол и т. д. и т. п.
2. Таблица Readers, здесь id, id из people, возможно еще какие-то поля, типа читательского рейтинга (добросовестный или говнюк)
3. Таблица Writer, тоже id, id из People, Псевдоним, может что-то еще.

Т. е. получается, если по аналогии с ООП, то
class People
class Readers extends People
class Writer extends People
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740729
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoMasterZivНу и что?
На учебных проектах и нужно учиться анализировать предметную область.
А именно этого автор топика и не сделал сходу.
Очевидная мысль о множестве авторов у книги ему в голову не пришла, хотя в IT книги большей частью написаны именно в соавторстве.

Я тут недавно в рамках процесса повторения/вспоминания синтаксиса java делал небольшой проект. Начал с того, что консольное приложение посылает данные Сервлету, тот должен запуститься и вернуть какой-то ответ. Далее я стал записывать запросы в файл. Потом у меня появились запросы разных типов, для которых нужен свой обработчик. Потом я стал сохранять данные в БД. Потом я перестроил БД так, чтобы разбить запросы от клиентов на 3 стадии - запрос получен и сохранен, запрос (т. е. пакет запросов данного типа) передан на обработку, запрос обработан и отправлен в архив. Для этого пришлось вводить несколько потоков, а также решать вопрос целостности данных. Ну и потом я переделал проект под maven и JPA.
И это при том, что с java я когда-то работал достаточно много. 1-я половина ТЗ была мне дана знакомым, а потом я уже сам развернулся.

Здесь же с SQL я знаком на уровне select ... from .... where, create, update ... where.
Т. ч. я решил начать с малого, чтобы просто хоть как-то работало. В процессе я все равно все переделаю и надобавляю кучу разных вариантов. Сейчас у меня голова от них пухнет. Может быть несколько авторов, могут быть однофамильцы, книги могут быть не возвращены, причем вероятно есть какие-то злостные должники и т. д. Также возможны разные библиотекари, как внимательные и ответственные, так и нет.

На данный момент БД, я немного подумав, решил обратно разделить писателей и читателей. В конце концов, если писатель придет в библиотеку что-нибудь взять, мы можем записать его как читателя. Ведь в жизни так и происходит. Я написал книгу, она лежит в библиотеке. Я прихожу туда и мне говорят, вы тут в первый раз ? Я говорю Да и на меня заводят карточку или запись в БД, если библиотека современная. Никто же меня не спрашивает, а не автор ли я какой-либо книги, давайте вашу карточку пометим особым цветом, а я ведь могу еще и соврать или писать под псевдонимом.
В общем пусть будут пока и Читатели и Писатели. Более того, я подумываю у писателей объединить firstName и lastName в fullname.
Иначе как мне именовать Эрик Мария Ремарка и Френсис Скотт Фитцжеральда. Это реально проблема, с которой я уже столкнулся.
Хотя можно оставить firstName и lastName, а fullname по дефолту firstName + lastName и при созданиии Писателя пользоваться не insert into, а процедурой addWriter (firstName, lastName, fullName (maybe null));просто многабукаф бз очков - не осилю..


ну
еще красиваяБбиблиотекарша может ббыть
и читателем и писателем
и библиотекарш0й



(Ц)...На учебных проектах и нужно учиться анализировать предметную область..





ТС - шахматист..)
типа - затеял п0ртейку
кот-я точно доведет его до - ченибудь реального
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740744
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoDarkMaster, может тогда сделать так ?

1. Таблица People, в ней как можно больше данных о человеке, кто, откуда, пол и т. д. и т. п.
2. Таблица Readers, здесь id, id из people, возможно еще какие-то поля, типа читательского рейтинга (добросовестный или говнюк)
3. Таблица Writer, тоже id, id из People, Псевдоним, может что-то еще.

Т. е. получается, если по аналогии с ООП, то
class People
class Readers extends People
class Writer extends People+1
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740771
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Ну примерно так. Т.е. есть основная инфа (таблица PEOPLE) - которая заполняется всегда, есть дополнительная инфа (доп. атрибуты), которая хранится где-то рядышком (в другой таблице) и заполняется только при необходимости. Т.о. получим, что биография Васи Пупкина нам особо не нужна, бо он не писатель, а те же данные по биографии Ремарка - могут быть интересны.

Т.е. по факту мы имеем 2-х людей - Ремарка и Пупкина в таблице PEOPLE. Которые могут фигурировать как авторы в таблице BOOK2AUTHOR (книга <-> автор(ы) и которые могут фигурировать в таблице JOURNAL (book <-> reader). В дополнение мы можем завести себе AUTHOR_BIO (автор-биография), READER_BAD (штрафники) и еще кучу всякого, но по сути всегда будем знать, что любая ссылка на человека - она в таблице PEOPLE.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740862
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> я немного подумав, решил обратно разделить писателей и читателей

Плохо подумали.

> я подумываю у писателей объединить firstName и lastName в fullname

Ещё раз плохо подумали.

> Френсис Скотт Фитцжеральд

Francis Scott Key Fitzgerald. Упс, да?

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

Код: sql
1.
2.
3.
4.
5.
create table Person (id int(10) auto_increment, firstName varchar(20),  lastName varchar(20), primary key (id));

create table Writer (id int(10) auto_increment,  personId int(10), fullName varchar(60), info varchar (1000), foreign key (personId) references Person (id), primary key (id));

create table Reader (id int(10) auto_increment, personId int(10), isMale boolean, phone varchar (20), foreign key (personId) references Person (id), primary key (id));
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740934
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну полагаю можно подвести некоторые итоги для Geronemo

Любая база суть модель реальной действительности. Модель может быть адекватной и не очень (одна моделька машины имеет только колеса и ездит, другая моделька имеет колеса, открывающиеся дверцы, но не ездит). В том и планида проектировщика, чтобы выбрать нужную модель, причем такую которая переживет смену мнений заказчика. Если проектировщик выбрал верно, то этого никто не заметит, а вот если ошибся, то пеняют все (как можно заблудится в трех соснах, это же очевидно). Это задача проектировщика (точнее менеджера проекта) решать когда сказать - хватит углублятся, давайте уже сделаем пилотный проект

Одного правильного ответа (типа 2*2=4) не существует. Для того же наследования я знаю три разных реализации (с одной таблицей, двумя или тремя) , каждая со своими достоинствами и недостатками. И это задача проектировщика выбрать одну реализацию, котораю будет использовать достоинства и нивелировать недостатки и ответить за свой выбор (см выше).

При всем богатстве идей, крайне важна фигура заказчика - человека который оценивает результат и платит гонорар (в универе это научный руководитель). Именно его хотелки должны реализовываться в первую очередь (любой каприз за ваши деньги). Проектировщик может только предупредить о последствиях и подстелить соломки, если в военное время или по особому распоряжению синус будет равен двум.

Для ощущения полного цимеса, лучше проводить изменения на живой базе с данными (а лучше с большим количеством данных и жестким временем простоя). Только тогда разработчик поймет прелесть ограничений (constraint) базы (которые вернут ошибку сразу, а не неправильные данные потом)
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38740949
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257Ну полагаю можно подвести некоторые итоги для Geronemo

Любая база суть модель реальной действительности. Модель может быть адекватной и не очень (одна моделька машины имеет только колеса и ездит, другая моделька имеет колеса, открывающиеся дверцы, но не ездит). В том и планида проектировщика, чтобы выбрать нужную модель, причем такую которая переживет смену мнений заказчика. Если проектировщик выбрал верно, то этого никто не заметит, а вот если ошибся, то пеняют все (как можно заблудится в трех соснах, это же очевидно). Это задача проектировщика (точнее менеджера проекта) решать когда сказать - хватит углублятся, давайте уже сделаем пилотный проект

Одного правильного ответа (типа 2*2=4) не существует. Для того же наследования я знаю три разных реализации (с одной таблицей, двумя или тремя) , каждая со своими достоинствами и недостатками. И это задача проектировщика выбрать одну реализацию, котораю будет использовать достоинства и нивелировать недостатки и ответить за свой выбор (см выше).

При всем богатстве идей, крайне важна фигура заказчика - человека который оценивает результат и платит гонорар (в универе это научный руководитель). Именно его хотелки должны реализовываться в первую очередь (любой каприз за ваши деньги). Проектировщик может только предупредить о последствиях и подстелить соломки, если в военное время или по особому распоряжению синус будет равен двум.

Для ощущения полного цимеса, лучше проводить изменения на живой базе с данными (а лучше с большим количеством данных и жестким временем простоя). Только тогда разработчик поймет прелесть ограничений (constraint) базы (которые вернут ошибку сразу, а не неправильные данные потом)
стройные нозьки
острый Ум..


и, главное,
душа
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741049
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.09.2014 14:18, Geronemo wrote:

> В общем пусть будут пока и Читатели и Писатели. Более того, я подумываю
> у писателей объединить firstName и lastName в fullname.
> Иначе как мне именовать Эрик Мария Ремарка и Френсис Скотт Фитцжеральда.
> Это реально проблема, с которой я уже столкнулся.


А это -- две несвязанные проблемы. Объединять ли читателей и писателей,
или нет, и -- именования. Такие имена могут быть и у читателей.

На самом деле вообще имя в виде "Фамилия, имя, отчество" -- это
специфика стран бывшего СССР.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741052
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Да-а-а-а ... я чувствую вы научите новичка разрабатывать БД ...
> А сущность "сотрудник библиотеки" вы в ещё одной таблице будете хранить ?

Ты абсолютно прав.
Но в контексте данной темы я бы НЕ настаивал на использовании
наследования и хранении в одной таблице. Я уже написал, почему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741059
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.09.2014 15:51, DarkMaster wrote:

> - все они имеют общие аттрибуты (ФИО, пол и т.п), использование которых
> диктуется только необходимостью (ну пусть будет таблица PEOPLE)
> - все могут выступать в минимум 2-х ипостасях - и как писатель и как
> читатель


ЕЩЁ РАЗ!!
Писатель может быть не обязательно человеком. Может быть человек, может
быть человек под псевдонимом, может быть коллектив, где каждый может
быть под своим именем, или под псевдонимом, либо может быть коллектив,
где все выступают под одним псевдонимом. Причём псевдонимом может
выступать как имя, так и прозвище, или вообще абстрактная подпись.
"Огненный лев", "пламенные борцы за победу революции", "Коллектив
трудящихся завода Полиграфмаш" и т.п.


> - книга имеет ссылку минимум на одного автора, или на нескольких авторов
> (соотношение один ко многим)


Книга должна ссылаться на автора через его имя или псевдоним.
При этом реального автора может вообще не быть, не быть человека,
стоящего за этим псевдонимом.

Кстати, есть ещё и произведения с неизвестным автором, и приписываемые
какому-то автору.

> - журнал приема-выдачи - хранит ссылку на читателя и книгу (соотношение
> один к одному)

Читатели могут обычно брать по несколько книг.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741061
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 08.09.2014 17:03, ChA wrote:

> Т. е. получается, если по аналогии с ООП, то
> class People
> class Readers extends People
> class Writer extends People
>
> +1

Да -100 !

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741090
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Любая база суть модель реальной действительности.

Поправлю: модель представлений о действительности. На самом деле это важное уточнение, которое делает контекст составной частью модели. Менеджер проекта вряд ли имеет об этом представление, так что роль архитектора баз данных несколько шире, чем принято считать.

> Одного правильного ответа (типа 2*2=4) не существует.

Он существует в том смысле, что для выбранного подмножества контекстов есть модель, состоящая только из элементарных сущностей с атомарными атрибутами.

> крайне важна фигура заказчика

Никакой роли фигура заказчика не играет; как правило, заказчик - обычный тупой баран. Важно исключительно техническое задание.

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

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

Деградация в России имеет тотальный характер, было бы странно, если бы она касалась только разработчиков.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741180
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257При всем богатстве идей, крайне важна фигура заказчика - человека который оценивает результат и платит гонорар (в универе это научный руководитель). Именно его хотелки должны реализовываться в первую очередь (любой каприз за ваши деньги). Проектировщик может только предупредить о последствиях и подстелить соломки, если в военное время или по особому распоряжению синус будет равен двум.
Думаю можно придумать виртуального заказчика. Дело в том, что я ищу работу в сфере программирования и вижу, что на всех собеседованиях меня довольно серьезно спрашивают про SQL.
Т. ч. пусть у нас заказчик будет потенциальным работодателем, которыму данную работу можно показать как некое портфолио.
Ну а я сам в процессе создания БД и СУБД довольно серьезно освою синтаксиси разного рода элементы SQL. Возможно даже какие-то нюансы.

Итак Заказчик - Потенциальный работодатель, который хочет увидеть систему, которая ему понравится и на основе чего он сделает вывод, что ТС, в целом, понимает, что такое проектирование БД, грамотный запросы, оптимизация и др. нюансы. Т. е. если есть какая-то возможность навернуть систему, чтобы показать, что я этой темой владею, а можно оставить простенько, но чтобы все работало, то лучше систему искусственно немного навернуть. Ну и разумеется, чтобы в этих наворотах был практический смысл какой-то, например, если бы это было реальное задание написать БД и СУБД для очень большой библиотеки, сделать все основное и оставить себе некоторые заделы на возможный апгрейд.

MasterZivOn 08.09.2014 17:03, ChA wrote:

> Т. е. получается, если по аналогии с ООП, то
> class People
> class Readers extends People
> class Writer extends People
>
> +1

Да -100 !


Поясните пожалуйста, знак минуса. Я не совсем понимаю, тут какой-то сарказм, '-' это на самом деле тире или и вам так не нравится, прокомментированное Вами.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741203
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoMasterZivOn 08.09.2014 17:03, ChA wrote:

> Т. е. получается, если по аналогии с ООП, то
> class People
> class Readers extends People
> class Writer extends People
>
> +1

Да -100 !
Поясните пожалуйста, знак минуса. Я не совсем понимаю, тут какой-то сарказм, '-' это на самом деле тире или и вам так не нравится, прокомментированное Вами.Не волнуйтесь, у Вас нормальное решение. Это стандартный механизм subtyping-а, применяемый при проектировании. Можете погуглить "subtyping database" или почитать, например - это для полноты картины. Впрочем, вариант с 2 таблицами, предложенный SERG1257 тоже нормальный. Всё зависит от задачу, которую Вы перед собой поставили. Можно, при желании, расширить модель и до степени, подразумеваемой MasterZiv, расширив понятия книги до любого источника, а автора до любого множества неизвестных сущностей, типа авторов Библии. Сейчас Вам решать, на каком уровне остановиться. В реальной задаче Вам всё равно придется "скакать" от ТЗ и, дай Бог, что оно будет вменяемым.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741671
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoSERG1257При всем богатстве идей, крайне важна фигура заказчика - человека который оценивает результат и платит гонорар (в универе это научный руководитель). Именно его хотелки должны реализовываться в первую очередь (любой каприз за ваши деньги). Проектировщик может только предупредить о последствиях и подстелить соломки, если в военное время или по особому распоряжению синус будет равен двум.
Думаю можно придумать виртуального заказчика. Дело в том, что я ищу работу в сфере программирования и вижу, что на всех собеседованиях меня довольно серьезно спрашивают про SQL.
Т. ч. пусть у нас заказчик будет потенциальным работодателем, которыму данную работу можно показать как некое портфолио.
Ну а я сам в процессе создания БД и СУБД довольно серьезно освою синтаксиси разного рода элементы SQL. Возможно даже какие-то нюансы.

Итак Заказчик - Потенциальный работодатель, который хочет увидеть систему, которая ему понравится и на основе чего он сделает вывод, что ТС, в целом, понимает, что такое проектирование БД, грамотный запросы, оптимизация и др. нюансы. Т. е. если есть какая-то возможность навернуть систему, чтобы показать, что я этой темой владею, а можно оставить простенько, но чтобы все работало, то лучше систему искусственно немного навернуть. Ну и разумеется, чтобы в этих наворотах был практический смысл какой-то, например, если бы это было реальное задание написать БД и СУБД для очень большой библиотеки, сделать все основное и оставить себе некоторые заделы на возможный апгрейд.

MasterZivOn 08.09.2014 17:03, ChA wrote:

> Т. е. получается, если по аналогии с ООП, то
> class People
> class Readers extends People
> class Writer extends People
>
> +1

Да -100 !


Поясните пожалуйста, знак минуса. Я не совсем понимаю, тут какой-то сарказм, '-' это на самом деле тире или и вам так не нравится, прокомментированное Вами.
да, так не нравится.
плоский уже писал.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38741674
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
не "плоский", а "почему"
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38742065
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621как правило, заказчик - обычный тупой баранМой пойнт был не в интеллектуальных способностях заказчика, а в том что даже в рамка форума было много Ценных Указаний и Важных Замечаний. В процессе работы их будет не меньше, причем они будут противоречить друг другу. Значит какие-то из них придется игнорировать, какие-то принимать к исполнению. Кроме того в процессе работы будет немало "серых зон" допускающих двоякое толкование. Для этого и нужно обоснование - "со слов заказчика".
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38742070
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257guest_20040621как правило, заказчик - обычный тупой баранМой пойнт был не в интеллектуальных способностях заказчика, а в том что даже в рамка форума было много Ценных Указаний и Важных Замечаний. В процессе работы их будет не меньше, причем они будут противоречить друг другу. Значит какие-то из них придется игнорировать , какие-то принимать к исполнению. Кроме того в процессе работы будет немало "серых зон" допускающих двоякое толкование. Для этого и нужно обоснование - "со слов заказчика".

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

Деградация на шарике - имеет глобальный характер,...


ну - Я

*))
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38742188
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Мой пойнт был не в интеллектуальных способностях заказчика

Мой, собственно, тоже. Интеллект - не самая важная характеристика и не антоним "барана".

> даже в рамка форума было много Ценных Указаний и Важных Замечаний

"Даже" - лишнее слово. В отсутствие формальной задачи обсуждение имеет скорее развлекательный характер. Причём, складывается впечатление, что высказавшиеся книг в принципе никогда не читали, а о научных библиотеках никогда не слышали. "Перевод", "периодическое издание", "стереотипное издание", "сборник" и пр. - понятия из другого измерения. Ничего личного, просто мысли вслух.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38742189
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> ну - Я

Спасибо, смешно. Оценку "баран" вам нужно ещё заработать, вы в самом начале длинного пути.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38742195
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621... обсуждение имеет скорее развлекательный характер. Причём, складывается впечатление, что ...вслух.


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

Спасибо, смешно. Оценку "баран" вам нужно ещё заработать, вы в самом начале длинного пути.

пожелай мне удачи


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

Вы, видимо, здесь недавно. Пожеланий нет, есть пара рекомендаций. Научитесь незнакомым людям говорить "вы". Это поможет избежать неожиданных конфузов разного рода. Не лезьте в обсуждения тем, где вы ни ухом, ни рылом. По тем же причинам.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38742308
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> пожелай мне удачи

Вы, видимо, здесь недавно. Пожеланий нет, есть пара рекомендаций. Научитесь незнакомым людям говорить "вы". Это поможет избежать неожиданных конфузов разного рода. Не лезьте в обсуждения тем, где вы ни ухом, ни рылом. По тем же причинам.

это из песни
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38743219
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, думаю надо мне на чем-то остановиться, все0таки время идет. На данный момент моя БД выглядит так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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 Reader (id int(10) auto_increment, firstName varchar(20),  lastName varchar(20), isMale boolean, phone varchar (20), primary key (id));

create table Book (id int(10) auto_increment, authorId int(10), bookName varchar(100), numberOfBooks int(10) default 1, 
    currentNumberOfBooks int(10) default 1, physicalCondition boolean default true, primary key (id), foreign key (authorId) references Writer(id) );

create table TakenBooks (id int(10) auto_increment, bookId int(10), readerId int(10), timeBookGot date not null, timeBookReturned date,
    foreign key (bookId) references Book (id), foreign key (readerId) references Writer (id), primary key (id));



Минимальный набор процедур
1. В библиотеку поступали определенная книга (возможно несколько экземпляров). Тут мы заодно проверяем автора и если его нету, то создаем и его
2. Библиотекарь создает нового автора (может показаться бессмысленной процедурой, т. к. п. 1 предусматривает создание авторов, но думаю такая функция все же должна быть).
3. В библиотеку пришел новый читатель - создаем ему аккаунт.
4. Библиотекарь проверяет наличие книги в библиотеке (по просьбе читателя, в основном)
5. Читатель берет книгу
6. Читатель возвращает книгу
7. Библиотекарь смотрит статистику, какие книги берут (эта функция нужна, библиотекарь мог какие-то книги дозаказать)
8. Библиотекарь списывает книгу.
9 и т. д.

В общем я ршил, что Будет ни одна, ни три, а 2 таблицы - читатели и писатели. Также я ввел понятие physicalCondition для книги. По дефолту все книги приходят новыми. Но со временем некоторые приходят в не очень удовлетворительное состояние и библиотекарь помечает ее. В будущем он закажет такую книгу (не знаю, как часто в библиотеках происходят обновления, раз в неделю допустим), а эту спишет. Так-с... ммм... нам все равно, куда оуходят списанные книги (домой библиотекарю или в детский дом), но есть интересный вопрос, надо ли нам где-то сохранять информацию, что книга списана.
Вопрос нескольких авторов тоже надо как-то решить.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38743241
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoВопрос нескольких авторов тоже надо как-то решить.

есть такой вариант
create table WriterOfBook (id int(10) auto_increment, bookId int(10), authorId int(10), foreign key (bookId) references Book (id), foreign key (authorId) references Writer(id), primary key (id));
Можно будет делать 3 записи, если 3 автора, т. е.
Книга1, Автор1
Книга1, Автор2
Книга1, Автор3
Книга2, Автор4

а в таблице Book получается убрать упоминание об авторе... хм... или ввести поле info, куда можно записать в произволной форме и авторов и краткое содержание и издателсьво. хм.. Или издательство сохранять отдельно (чтобы смотреть книги каких издательств выходят чаще из строя)... (думаю вслух) или же забить на этот нюанс и для начала сделать то, что есть.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38743386
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь реализуйте поддержку каждого экземпляра поштучно.
Кроме того реализуйте массовую загрузку книг из, скажем старой версии программы для библиотекаря.
И напоследок задача предложенная DarkMaster - каталог для поиска нужной книги.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38743460
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo physicalCondition для книги. По дефолту все книги приходят новыми. Но со временем некоторые приходят в не очень удовлетворительное состояние и библиотекарь помечает ее. В будущем он закажет такую книгу (не знаю, как часто в библиотеках происходят обновления, раз в неделю допустим), а эту спишет.

Удаляю понятие physicalCondition, ибо тогда придется в таблице Book удалять поля к-во книг и к-во книг в наличии, а вместо этого для каждой книги делать свою запись.

Хотя можно ввести еще одну таблицу, что-то типа архива, куда перемещаются книги в неудовлетворительном состоянии в процессе списания их. В этой таблице могут находиться книги, как уже перемещенные в детский дом, выброшенные, так и лежащие на отдельной полке. И в принципе эту полку можно также рассматривать, когда мы хотим найти книгу.
Алгоритм
if (книга в наличи)
выдаем книгу();
else if (книга списана, но физически все еще присутствует в библиотеке)
выдаем списанную книгу();
Или зачем все так усложнять, хм.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38743480
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

У Вас в таблице Book смешаны издание и экземпляр издания. Name - это атрибут издания, а physicalCondition - атрибут экземпляра.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38743757
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo, база конечно примитивная. Для учебных целей сойдёт конечно. Но для нормального использования нихрена не получится. Главная ошибка в том, что писатели считаются авторами книги. На самом деле авторами физически существующей книги являются ИЗДАТЕЛЬСТВА. А писатели являются авторами ПРОИЗВЕДЕНИЯ. Таких понятий в Вашей базе нет вообще (хотя мысль про издательства маленько Вас посетила, но записывать его в какое-то общее поле - это явно не путь к истине).
Надо продумать наличие в БД издательств и произведений, чтоб БД библиотеки была более-менее приемлемая.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38744175
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr.FontaineНадо продумать наличие в БД издательств и произведений, чтоб БД библиотеки была более-менее приемлемая.

С точки зрения пользователя библиотеки, ему частенько фиолетово, какой у книги издатель. Приходим, просим книгу Кнута. Вы помните, кто и когда ее издавал? Сведения об издательстве конечно нужны, но не приоритетны. И запрос более удобно строить не как "покажите мне книги издательства NNN", а как "покажите мне книги Кнута (если можно - с издательствами)".
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38744276
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster, полностью согласен, что пользователю фиолетово даже не то что кто издал книгу, ему название книги фиолетово. Он просто хочет прочитать "Бесы" Достоевского, а кто издал, издал ли отдельным изданием или в полном собрании сочинений или в в журнале каком (Роман-газета, например раньше выпускалась, сейчас не знаю, не интересовался) посетителю библиотеки (ну в частности, мне лично) вообще по барабану.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38744469
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
Mr.Fontaine,

Есть стандарт библиографического описания, им и надо руководствоваться при проектировании БД.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38744971
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы, думается мне эту фразу лучше обратить топикстартеру. Ибо как он запишет к себе в базу например, такую книгу
Код: plaintext
Н.Н.Носов Приключения Незнайки и его друзей /Игорь Носов. Остров Незнайки – М. : ЭКСМО-пресс, 2001.
С двумя повестями Николая Носова "Приключения Незнайки и его друзей" и "Незнайка в Солнечном городе", а также повестью "Остров Незнайки" Игоря Носова
или какие проивзедения можно прочитать взяв двухтомник сочинений Зинаиды Гиппиус.
Код: plaintext
1.
2.
Том 1 Без талисмана, Победители, Сумерки духа
Том 2 Чертова кукла(Жизнеописание в 33-х главах), Роман-царевич(История одного начинания), Чужая любовь. 
...
Рейтинг: 0 / 0
Создал базу данных для освоения 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
Создал базу данных для освоения SQL
    #38759241
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
GeronemoКто-нибудь, подтвердите плиз, правильные ли я завел таблицы и правильно ли их связал. А то у меня из-за сомнений проект на паузе стоит.
Неправильно… Сходите в настоящую библиотеку, посмотрите на каталоги, подумайте, почитайте ГОСТ на библиографическое описание…
Для начала, у вас есть книги, те самые, что можно взять в руки и поставить на полку. При поступлении в библиотеку они получают инвентарные номера (каждый экземпляр), их описывают (заводят карточки в каталоге) по вышеупомянутому стандарту, затем им присваивают шифр (по нему потом книгу ищут на полке).
Читателю выдают не один из 10 экземпляров, в вполне конкретный, о чем в соотвествующем месте делается отметка. И т.д., и т.п.
В общем, довольно нудно, но вполне осуществимо.
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38759255
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор … Сходите в настоящую библиотеку..

предлагали -
...взял бы готовый пакет для управления библиотекой и ...
16547756
...
Рейтинг: 0 / 0
Создал базу данных для освоения SQL
    #38759423
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
1001,
человек пошел трудным путем, имеет право.
...
Рейтинг: 0 / 0
103 сообщений из 103, показаны все 5 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Создал базу данных для освоения SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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