![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
Привет... Перелистал кучу книжек по Access. Но так толкового ничего и не нашёл. Мне нужно сделать БД библиотеку. Я не понимаю для чего нужны ключи и связи, точнее как это всё расставлять? По каккому принципу? Физически умею, логики не знаю. Может кто дасть ссылочку на самоучитель где на примере построения БД рассказывают какие ключи для чего и почему менно так а не иначе ставяться связи. Или может кто расскажет как и что!!! Вот сколько пробовал, никак с этим не разберусь...
Пожалуйста, помогите... |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Ну, давайте я попробую.
Предположим, вы делаете телефонный справочник ваших знакомых. Первый вариант. Можно сделать просто и тупо - создать одну-единственную таблицу с полями "Номер записи", "Фамилия, имя отчество", "Номер телефона", "Город", "Код города". И заносить в нее всех подряд. А теперь представьте себе, сколько там будет записей, у которых в поле "Город" и "Код города" будет записано одно и то же... Нерациональное использование занимаемого таблицей пространства, не так ли? Чтобы этого избежать - второй вариант. Создаем две таблицы - первая с полями "Идентификатор записи", "Фамилия, имя отчество", "Номер телефона", "Идентификатор города", а вторая - с полями "Идентификатор города", "Город", "Код города". Теперь у нас во второй таблице будут только уникальные записи (почему - немного дальше по тексту ![]() Так вот, первые поля в обеих таблицах являются ключевыми (их, как правило, делают автоикрементными) и однозначно определяют каждую запись. Более того, то, что называют ключом (первичный индекс), может состоять из нескольких полей. Например, если мы сделаем во второй таблице ключ, включающий в себя два поля ("Идентификатор города", "Город"), то вы уже при всем желании не сможете внести в эту таблицу один и тот же город дважды... То же самое и с первой таблицей - если в ключе будут первые 3 поля, то Ивановых Иванов Ивановичей вы сможете внести сколько угодно, но вот с одинаковыми номерами телефонов - никак. Теперь по связям. Эти две таблицы оказались связаны по полю "Идентификатор города". Вернее, мы можем связывать их по этому полю. То есть, например, прогуливаясь по первой таблице, вы всегда можете (по значению этого поля) сослаться на вторую таблицу, чтобы выяснить либо название города, либо тлф код города, либо и то, и другое. Аналогично, перебирая записи во второй таблице, вы можете озаботиться вопросом "А кто же у меня в этом городе?" и получить ответ, выбрав из первой таблицы всех, у кого "Идентификатор города" равен запрашиваемому. Кроме того, есть так называемые внутренние связи между таблицами, закладываемые на этапе создания таблиц. Я этот метод не поддерживаю, считаю, что это - от лукавого, и предпочитаю неявные связи, которые вам и описал... Кроме первичных индексов можно определять и вторичные. Они ничем не отличаются от первичных (просто не влияют на уникальность записей) и служат, как правило, для ускорения доступа по значениям полей, входящих в их состав. Вторичные индексы несколько увеличивают размер таблиц, поскольку они являются как бы кратенькими справочниками для системы управления БД и, например, в Парадоксе, представляют собой отдельный файлик. Ну вот, в первом приближении, примерно так. Буду рад, если хоть немного смог помочь разобраться. Последний раз редактировалось mihali4; 18.10.2008 в 19:32. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
Да, спасибо, помогли. Детально и довольно доходчиво!!! )))
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
mihali4, не моглы бы вы сказать глядя на моё задание достаточно ли у меня таблиц описывающих мою предметную область? Файл прикрепляю.... И помогите пожалуйста расставить связи...
Что вы писали вроде понял, но как только берусь за своё задание, так сразу в ступоре... Предметная область - библиотека. Решаемые задачи: выдача справок о наличии книг, учет читателей и выдачи книг; Попск: читателей - должников. Запросы: Упорядочение по полям: автор книги, ФИО читателя. Поиск: сведения о заданном читателе по ФИО; наличие заданной книги (известен автор и название). Выборка: книги автора ХХ; список читателей - должников, держащих книгу более месяца. Вычисления: а) количество читателей - должников на текущий день; б) сколько книг выдано за январь. Коррекция: удаление сведений о выдаче книг за прошлый год; изменение адреса заданного читателя с ХХ на УУ. Ограничения целостностп: а) цена книги не менее 5 руб.; б) сведения о выдаваемой книге должны быть в каталоге; в) ФИО и адрес читателя - не пустые значения. Табличный отчет: список должников (ФИО, адрес, место работы), группировка по месту работы. Произвольный отчет: Кляуза на работу о должниках. |
![]() |
![]() |
![]() |
#5 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Смотрю.
Таблица читателей (в общем-то - это справочник по читателям): ReaderId - идентификатор читателя Name - ФИО читателя Adress - адрес читателя Telephone - телефон читателя NameBook - название книги ??? Это-то зачем здесь? Убрать! Таблица книг (просто справочник по книгам, имеющимся в наличии в библиотеке) BookId - идентификатор книги (записи) BookName - наименование книги BookAuthor - автор BookPublisher - издательство BookPrice - цена Тут - все нормально. Правда, у книг есть особый идентификатор УДК. Может, и под него поле сделать? Ну, и главная таблица - выдачи книг: DistrId - идентификатор записи. ReaderId - идентификатор читателя. BookName - опять двадцать пять! Зачем? Убрать! У нас есть BookId - по нему мы все узнаем о книге из таблицы книг! BookId - идентификатор книги. DateOfBegin - дата выдачи. DateOfEnd - планируемая дата возврата. DateOfRealEnd - реальная дата возврата (поверьте, пригодится). Все. Цитата:
Последний раз редактировалось mihali4; 19.10.2008 в 14:23. |
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
Спасибо, вы мне очень помогли... Теперь буду делать...
Цитата:
![]() |
|
![]() |
![]() |
![]() |
#7 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]() Цитата:
Я имел в виду, что пункт меню "Сервис" (или как вы его назовете) будет включать примерно такие подпункты: - работа с таблицей (или перечнем) книг; //при поступлении/списании книг - работа с таблицей (или перечнем) читателей; //при необходимости внесения новых, удаления, корректировки данных - выборки из базы (запросы); //это то, что мы обсудили выше - выборка 1; - выборка 2; - выборка 3; ... - выдача отчета (кляузы) На все пункты можно открывать модальные окошки. (На выборки - одно, с возможностью выбора конкретного запроса). Впрочем, это не рекомендации, а просто мое видение (стандарт, если хотите). Так что - за вами полная свобода действий... ![]() Последний раз редактировалось mihali4; 19.10.2008 в 23:45. |
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
![]()
спасибо, перехожу к обсуждению темы, но уже по делфи...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
!!!Связи!!! | Alexij | БД в Delphi | 1 | 02.12.2010 18:34 |
БД. Индексы и ключи | Сергей089 | Помощь студентам | 4 | 22.09.2008 21:30 |
Не обновляются связи!!! | Bezdar | Microsoft Office Excel | 0 | 06.08.2008 15:15 |
ключи | veter_s_morya | SQL, базы данных | 1 | 30.06.2008 15:33 |