Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2008, 18:05   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию Связи, ключи и т.д.

Привет... Перелистал кучу книжек по Access. Но так толкового ничего и не нашёл. Мне нужно сделать БД библиотеку. Я не понимаю для чего нужны ключи и связи, точнее как это всё расставлять? По каккому принципу? Физически умею, логики не знаю. Может кто дасть ссылочку на самоучитель где на примере построения БД рассказывают какие ключи для чего и почему менно так а не иначе ставяться связи. Или может кто расскажет как и что!!! Вот сколько пробовал, никак с этим не разберусь...
Пожалуйста, помогите...
Arkuz вне форума Ответить с цитированием
Старый 18.10.2008, 19:27   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, давайте я попробую.
Предположим, вы делаете телефонный справочник ваших знакомых.
Первый вариант. Можно сделать просто и тупо - создать одну-единственную таблицу с полями "Номер записи", "Фамилия, имя отчество", "Номер телефона", "Город", "Код города". И заносить в нее всех подряд.
А теперь представьте себе, сколько там будет записей, у которых в поле "Город" и "Код города" будет записано одно и то же... Нерациональное использование занимаемого таблицей пространства, не так ли?
Чтобы этого избежать - второй вариант.
Создаем две таблицы - первая с полями "Идентификатор записи", "Фамилия, имя отчество", "Номер телефона", "Идентификатор города", а вторая - с полями "Идентификатор города", "Город", "Код города".
Теперь у нас во второй таблице будут только уникальные записи (почему - немного дальше по тексту ), а в первой - занято гораздо меньше места, поскольку в ней будет только циферка - ссылка на запись во второй таблице.
Так вот, первые поля в обеих таблицах являются ключевыми (их, как правило, делают автоикрементными) и однозначно определяют каждую запись.
Более того, то, что называют ключом (первичный индекс), может состоять из нескольких полей. Например, если мы сделаем во второй таблице ключ, включающий в себя два поля ("Идентификатор города", "Город"), то вы уже при всем желании не сможете внести в эту таблицу один и тот же город дважды...
То же самое и с первой таблицей - если в ключе будут первые 3 поля, то Ивановых Иванов Ивановичей вы сможете внести сколько угодно, но вот с одинаковыми номерами телефонов - никак.
Теперь по связям.
Эти две таблицы оказались связаны по полю "Идентификатор города". Вернее, мы можем связывать их по этому полю. То есть, например, прогуливаясь по первой таблице, вы всегда можете (по значению этого поля) сослаться на вторую таблицу, чтобы выяснить либо название города, либо тлф код города, либо и то, и другое.
Аналогично, перебирая записи во второй таблице, вы можете озаботиться вопросом "А кто же у меня в этом городе?" и получить ответ, выбрав из первой таблицы всех, у кого "Идентификатор города" равен запрашиваемому.
Кроме того, есть так называемые внутренние связи между таблицами, закладываемые на этапе создания таблиц. Я этот метод не поддерживаю, считаю, что это - от лукавого, и предпочитаю неявные связи, которые вам и описал...
Кроме первичных индексов можно определять и вторичные. Они ничем не отличаются от первичных (просто не влияют на уникальность записей) и служат, как правило, для ускорения доступа по значениям полей, входящих в их состав. Вторичные индексы несколько увеличивают размер таблиц, поскольку они являются как бы кратенькими справочниками для системы управления БД и, например, в Парадоксе, представляют собой отдельный файлик.
Ну вот, в первом приближении, примерно так.
Буду рад, если хоть немного смог помочь разобраться.

Последний раз редактировалось mihali4; 18.10.2008 в 19:32.
mihali4 вне форума Ответить с цитированием
Старый 19.10.2008, 01:02   #3
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Да, спасибо, помогли. Детально и довольно доходчиво!!! )))
Arkuz вне форума Ответить с цитированием
Старый 19.10.2008, 12:19   #4
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

mihali4, не моглы бы вы сказать глядя на моё задание достаточно ли у меня таблиц описывающих мою предметную область? Файл прикрепляю.... И помогите пожалуйста расставить связи...
Что вы писали вроде понял, но как только берусь за своё задание, так сразу в ступоре...

Предметная область - библиотека.
Решаемые задачи: выдача справок о наличии книг, учет читателей и выдачи книг; Попск: читателей - должников.
Запросы:
Упорядочение по полям: автор книги, ФИО читателя.
Поиск: сведения о заданном читателе по ФИО; наличие заданной книги (известен автор и название).
Выборка: книги автора ХХ; список читателей - должников, держащих книгу более месяца.
Вычисления: а) количество читателей - должников на текущий день; б) сколько книг выдано за январь.
Коррекция: удаление сведений о выдаче книг за прошлый год; изменение адреса заданного читателя с ХХ на УУ.
Ограничения целостностп: а) цена книги не менее 5 руб.; б) сведения о
выдаваемой книге должны быть в каталоге; в) ФИО и адрес читателя - не пустые значения.
Табличный отчет: список должников (ФИО, адрес, место работы), группировка по месту работы.
Произвольный отчет: Кляуза на работу о должниках.
Вложения
Тип файла: rar Library.rar (22.6 Кб, 48 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 19.10.2008, 14:17   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Смотрю.
Таблица читателей (в общем-то - это справочник по читателям):
ReaderId - идентификатор читателя
Name - ФИО читателя
Adress - адрес читателя
Telephone - телефон читателя
NameBook - название книги ??? Это-то зачем здесь? Убрать!

Таблица книг (просто справочник по книгам, имеющимся в наличии в библиотеке)
BookId - идентификатор книги (записи)
BookName - наименование книги
BookAuthor - автор
BookPublisher - издательство
BookPrice - цена
Тут - все нормально. Правда, у книг есть особый идентификатор УДК. Может, и под него поле сделать?

Ну, и главная таблица - выдачи книг:
DistrId - идентификатор записи.
ReaderId - идентификатор читателя.
BookName - опять двадцать пять! Зачем? Убрать! У нас есть BookId - по нему мы все узнаем о книге из таблицы книг!
BookId - идентификатор книги.
DateOfBegin - дата выдачи.
DateOfEnd - планируемая дата возврата.
DateOfRealEnd - реальная дата возврата (поверьте, пригодится).

Все.
Цитата:
Решаемые задачи:
выдача справок о наличии книг - простой поиск в таблице книг;
учет читателей - таблица читателей;
выдачи книг - таблица выдачи;
поиск читателей - должников - составьте выборку из таблицы читателей, идентификаторы которых есть в таблице выдачи, причем текущая дата больше планируемой даты возврата и реальная дата возврата есть пустое поле.
Запросы:
Упорядочение по полям: автор книги, ФИО читателя - ну, это вы, наверное, знаете - ORDER BY.
Поиск: сведения о заданном читателе по ФИО; наличие заданной книги (известен автор и название) - это совсем простые выборки.
Выборка:
книги автора ХХ - тоже совсем просто;
список читателей - должников, держащих книгу более месяца - то же, что и "поиск читателей - должников" плюс условие (текущая дата плюс месяц>планируемая дата возврата).
Вычисления:
а) количество читателей - должников на текущий день - это COUNT по уже описанным условиям;
б) сколько книг выдано за январь - выборка всех выдач, где дата выдачи BETWEEN 1 и 31 января нужного года.
Коррекция:
удаление сведений о выдаче книг за прошлый год - вычисляем крайнюю дату - год минус один и удаляем все записи, у которых даты выдачи меньше этой даты при условии, что есть реальная дата возврата;
изменение адреса заданного читателя с ХХ на УУ - это сервисная функция (как и работа со списком книг) - отдельный пункт и окно в меню "Сервис" программы.
Ограничения целостности:
а) цена книги не менее 5 руб. - MINVALUE при создании таблицы;
б) сведения о выдаваемой книге должны быть в каталоге - ??? Не понял! А как вы можете выдать книгу, которой нет в базе???
в) ФИО и адрес читателя - не пустые значения - NOTNULL при создании базы.
Табличный отчет:
список должников (ФИО, адрес, место работы) - уже рассмотрели;
группировка по месту работы - GROUP BY.
Произвольный отчет:
Кляуза на работу о должниках - ну, это вам и карты в руки.

Последний раз редактировалось mihali4; 19.10.2008 в 14:23.
mihali4 вне форума Ответить с цитированием
Старый 19.10.2008, 23:29   #6
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо, вы мне очень помогли... Теперь буду делать...
Цитата:
изменение адреса заданного читателя с ХХ на УУ - это сервисная функция (как и работа со списком книг) - отдельный пункт и окно в меню "Сервис" программы.
Мне обработку таблиц нужно сделать в делфи. Саму базу в инцесте , а приложение управления на делфе...
Arkuz вне форума Ответить с цитированием
Старый 19.10.2008, 23:41   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
сервисная функция (как и работа со списком книг) - отдельный пункт и окно в меню "Сервис" программы
На всякий случай...
Я имел в виду, что пункт меню "Сервис" (или как вы его назовете) будет включать примерно такие подпункты:
- работа с таблицей (или перечнем) книг; //при поступлении/списании книг
- работа с таблицей (или перечнем) читателей; //при необходимости внесения новых, удаления, корректировки данных
- выборки из базы (запросы); //это то, что мы обсудили выше
- выборка 1;
- выборка 2;
- выборка 3;
...
- выдача отчета (кляузы)
На все пункты можно открывать модальные окошки. (На выборки - одно, с возможностью выбора конкретного запроса).
Впрочем, это не рекомендации, а просто мое видение (стандарт, если хотите). Так что - за вами полная свобода действий...

Последний раз редактировалось mihali4; 19.10.2008 в 23:45.
mihali4 вне форума Ответить с цитированием
Старый 20.10.2008, 20:25   #8
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

спасибо, перехожу к обсуждению темы, но уже по делфи...
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
!!!Связи!!! 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