Обеспечение целостности данных является важнейшей задачей при проектировании и эксплуатации систем обработки данных.
Целостность – это актуальность и непротиворечивость информации, ее защищенность от разрушения и несанкционированного изменения. Целостность является одним из аспектов информационной безопасности наряду с доступностью – возможностью с приемлемыми затратами получить требуемую информационную услугу, и конфиденциальностью – защитой от несанкционированного прочтения.
Ограничение целостности – это набор специальных предложений, описывающих допустимые значения отдельных информационных единиц и связей между ними. Большинство ограничений целостности вызваны спецификой предметной области. Нарушение ограничений целостности может происходить по нескольким причинам: ошибки, преднамеренное нарушение, вирусы, сбои. Поэтому необходимо контролировать ограничения целостности.
Помимо упомянутых нами на стадии описания предметной области ограничений целостности, во время разработки базы данных интернет-магазина нами также были выявлены многие другие ограничения. Большинство из них контролируются непосредственно в таблицах. Поскольку ввод всех данных в таблице осуществляется через разработанные нами вспомогательные формы, также существует достаточно большое количество ограничений, которые контролируются средствами конструктора форм, а также при помощи встроенного в среду MS ACCESS визуального объектно-ориентированного языка Visual Basic. Далее будут перечислены все ограничения целостности, которые будут контролироваться в данном курсовом проекте, а также выбранные способы реализации контроля целостности для каждого из ограничений.
Ограничения, контролируемые в таблицах:
1. Текстовое поле «E-mail» в таблице «Покупатель» не может содержать пробелов или кириллических символов
Аналогичным образом ограничение на данное поле контролируется в таблицах «Сотрудник» и «Поставщик»
2. Текстовое поле «ФИО» в таблице «Покупатель» не может содержать цифр
Аналогичным образом ограничение на данное поле контролируется в таблице «Сотрудник»
3. Значения поля «Дата_рождения» в таблице «Покупатель» не может превышать текущую дату и должно быть определенного вида, что контролируется маской ввода
4. Поле «Дата_регистрации» в таблице «Покупатель», как правило, содержит дату добавления записи в таблицу, не должно превышать текущую дату и должно быть определенного вида, который контролируется маской ввода
5. Поле «Пол» в таблице «Покупатель» содержит фиксированный набор значений, контролируемых списком подстановки
6. Поле «Образование» в таблице «Покупатель» содержит фиксированный набор значений, контролируемый списком подстановки
7. Поле «Логин» в таблице «Покупатель/телефон» содержит фиксированный набор значений, источником которых является таблица «покупатель»
Аналогичным образом ограничение на данное поле контролируется в таблицах «заказ», «кредитная карта» и «товар/оценка»
8. Поле «Телефон» в таблице «Покупатель/телефон» может содержать только цифры и должно быть определенного вида, который контролируется маской ввода
Аналогичным образом ограничение на данное поле контролируется в таблицах «поставщик», «сотрудник» и «точка выдачи». Ограничение подобного рода установлено и на поле «факс» в таблицах «сотрудник» и «точка выдачи»
9. Поле «id_товара» в таблице «Товар/оценка» содержит фиксированный набор значений, источником которых является таблица «товар»
Аналогичным образом ограничение на данное поле контролируется в таблице «Заказ товар»
10. Поле «Оценка» в таблице «Товар/оценка» содержит фиксированный набор значений и позволяет оценить клиенту выбранный товар в диапазоне от 1 до 10
11. Текстовое поле «Время_работы» в таблице «Точка выдачи» может содержать только цифры и должно быть определенного диапазонного вида, который контролируется маской ввода
12.Поле «Название_точки» в таблице «Точка выдачи/телефон» содержит фиксированный набор значений, источником которых является таблица «Точка выдачи»
Аналогичным образом ограничение на данное поле контролируется в таблице «заказ»
13. Поле «Должность» в таблице «Сотрудник» содержит фиксированный набор значений, контролируемый списком подстановки
14. Поле «Номер_кред_карты» в таблице «Кредитная карта» должно содержать только цифры и быть определенного вида, который контролируется маской ввода
15. Поле «Имя_владельца» в таблице «Кредитная карта» должно содержать только латинские буквы
16. Поле «Проверочный_код» в таблице «Кредитная карта» должно быть определенного вида, который контролируется маской ввода
17. Поле «Срок_истечения» в таблице «Кредитная карта» должно быть определенного вида, который контролируется маской ввода. При этом для использования кредитной карты срок её истечения должен превышать текущую дату или быть равным ей
18. Поле «№_заказа» в таблице «Заказ» содержит фиксированный набор значений, источником которых является таблица «Заказ товар»
Аналогичным образом ограничение на данное поле контролируется в таблице «доставка»
19. Поле «Дата_заказа» в таблице «Заказ» должно быть определенного вида, который контролируется маской ввода. По умолчанию выставляется дата добавления заказа и также контролируется невозможность ввода даты, превышающей текущую
20. Поле «Время_заказа» в таблице «Заказ» должно быть определенного вида, который контролируется маской ввода. По умолчанию выставляется время добавления заказа.
21. Поле «Статус_заказа» в таблице «Заказ» содержит фиксированный набор значений, контролируемый списком подстановки
22. Поле «Способ_оплаты» в таблице «Заказ» содержит фиксированный набор значений, контролируемый списком подстановки
23. Поле «Способ_получения» в таблице «Заказ» содержит фиксированный набор значений, контролируемый списком подстановки
24. Поле «Табельный_номер» в таблице «Заказ» содержит фиксированный набор значений, источником которых является таблица «Сотрудник»
Аналогичным образом ограничение на данное поле контролируется в таблице «доставка»
25. Поле «Удаленность_МКАД» в таблице «Доставка» содержит ограничение на дальность расстояния осуществляемой доставки. Доставка ограничена радиусом 60-ти км. От МКАД
26. Поле «Статус_доставки» в таблице «Доставка» содержит фиксированный набор значений, контролируемый списком подстановки
27. Поле «Вид_доставки» в таблице «Доставка» содержит фиксированный набор значений, контролируемый списком подстановки
Ограничения, контролируемые на формах посредством Visual Basic:
1. Для организации ограничений на доступ определенных сотрудников к различным таблицам через формы на них предусмотрен ввод пароля (1111)
Private Sub Кнопка8_Click()
On Error GoTo Err_Кнопка8_Click
Dim stDocName As String
Dim stLinkCriteria, pas As String
pas = InputBox("Введите пароль", "Пароль")
If pas = "1111" Then
stDocName = ChrW(1055) & ChrW(1086) & ChrW(1089) & ChrW(1090) & ChrW(1072) & ChrW(1074) & ChrW(1097) & ChrW(1080) & ChrW(1082) & ChrW(47) & ChrW(1082) & ChrW(1072) & ChrW(1090) & ChrW(1077) & ChrW(1075) & ChrW(1086) & ChrW(1088) & ChrW(1080) & ChrW(1103)
DoCmd.OpenForm stDocName, , , stLinkCriteria
Else
MsgBox ("Пароль неверный")
End If
2. При редактировании формы «Доставка» осуществляется пересчет всех вычисляемых полей (Стоимость, Суммарный вес, Суммарный объем) при смене номера заказа, а также определяется вид доставки в зависимости от влияющих на его выбор факторов (Стоимость, Суммарный вес, Суммарный объем)
Private Sub №_заказа_Click()
Суммарный_вес_заказа.Requery
Суммарный_вес_заказа = Суммарный_вес_заказа.ItemData(0)
Суммарный_объем_заказа.Requery
Суммарный_объем_заказа = Суммарный_объем_заказа.ItemData(0)
Стоимость_заказа.Requery
Стоимость_заказа = Стоимость_заказа.ItemData(0)
If Удаленность_МКАД_км.Value = 0 Then Вид_доставки.Value = "Курьер"
If (Стоимость_заказа.Value > 30000) Or (Суммарный_вес_заказа.Value >= 2.5) Or (Суммарный_объем_заказа.Value > 4000) Then Вид_доставки.Value = "Легковой транспорт"
If (Суммарный_вес_заказа.Value >= 23) Or (Суммарный_объем_заказа.Value > 25000) Then Вид_доставки.Value = "Грузовой транспорт"
If Вид_доставки.Value = "Курьер" Then Стоимость_доставки.Value = 250
If Вид_доставки.Value = "Легковой транспорт" Then Стоимость_доставки.Value = 350 + Удаленность_МКАД_км.Value * 15
If Вид_доставки.Value = "Грузовой транспорт" Then Стоимость_доставки.Value = 450 + Удаленность_МКАД_км.Value * 20
3. При редактировании поля «Удаленность_от_МКАД_км» на форме «Доставка» осуществляется пересчет стоимости доставки в зависимости от его значения
Private Sub Удаленность_МКАД_км_LostFocus()
If Вид_доставки.Value = "Курьер" Then Стоимость_доставки.Value = 250
If Вид_доставки.Value = "Легковой транспорт" Then Стоимость_доставки.Value = 350 + Удаленность_МКАД_км.Value * 15
If Вид_доставки.Value = "Грузовой транспорт" Then Стоимость_доставки.Value = 450 + Удаленность_МКАД_км.Value * 20
End Sub
4. При обращении к форме «заказ» на основании номера заказа автоматически пересчитывается стоимость заказа
Private Sub №_заказа_Click()
Стоимость_заказа.Requery
End Sub
5. При обращении к форме «заказ» при определении способа получения заказа контролируется возможность ввода точки доставки в зависимости от его выбора
Private Sub Способ_получения_Click()
If Способ_получения.Value = "Доставка" Then
Название_точки.Value = " "
Название_точки.Visible = False
End If
If Способ_получения.Value = "Самовывоз" Then
Название_точки.Visible = True
End If
6. При обращении к форме «Корзина заказов», эмулирующей подобный функционал сайта автоматически определяется следующий номер заказа
Private Sub Form_Current()
Me![Список12].SetFocus
Список12.ListIndex = 0
Поле14.Value = Список12.Value + 1
End Sub
7. При обращении к форме «Корзина заказов», эмулирующей подобный функционал сайта контролируется возможность осуществления оформления заказа только при условии добавления в корзину хотя бы одной единицы товара, а также невозможность выбора подкатегории, не принадлежащей выбранной категории
Private Sub ПолеСоСписком2_Click()
ПолеСоСписком4.Value = ""
ПолеСоСписком6.Value = ""
If ПолеСоСписком2.Value <> "" And ПолеСоСписком4.Value <> "" And ПолеСоСписком6.Value <> "" Then
Кнопка18.Visible = True
Else
Кнопка18.Visible = False
End If
End Sub
Private Sub ПолеСоСписком4_Click()
ПолеСоСписком6.Value = ""
If ПолеСоСписком2.Value <> "" And ПолеСоСписком4.Value <> "" And ПолеСоСписком6.Value <> "" Then
Кнопка18.Visible = True
Else
Кнопка18.Visible = False
End If
End Sub
Private Sub ПолеСоСписком4_GotFocus()
Me.Refresh
End Sub
Private Sub ПолеСоСписком6_Click()
If ПолеСоСписком2.Value <> "" And ПолеСоСписком4.Value <> "" And ПолеСоСписком6.Value <> "" Then
Кнопка18.Visible = True
Else
Кнопка18.Visible = False
End If
End Sub
Private Sub ПолеСоСписком6_GotFocus()
Me.Refresh
End Sub
Аналогичным образом происходит проверка на категории и подкатегории при обращении к форме «Оценка», эмулирующей подобный функционал сайта
8. При обращении к форме «Оформление заказа», эмулирующей подобный функционал сайта, осуществляется пересчет всех вычисляемых полей (Стоимость, Суммарный вес, Суммарный объем) при смене номера заказа, а также определяется вид доставки в зависимости от влияющих на его выбор факторов (Стоимость, Суммарный вес, Суммарный объем)
Список69.Requery
Me![Список69].SetFocus
Список69.ListIndex = 0
№_заказа.Value = Список69.Value
Суммарный_вес_заказа.Requery
Me![Суммарный_вес_заказа].SetFocus
Суммарный_вес_заказа.ListIndex = 0
Суммарный_объем_заказа.Requery
Me![Суммарный_объем_заказа].SetFocus
Суммарный_объем_заказа.ListIndex = 0
Стоимость_заказа.Requery
Me![Стоимость_заказа].SetFocus
Стоимость_заказа.ListIndex = 0
If Удаленность_МКАД_км.Value = 0 Then Вид_доставки.Value = "Курьер"
If (Стоимость_заказа.Value > 30000) Or (Суммарный_вес_заказа.Value >= 2.5) Or (Суммарный_объем_заказа.Value > 4000) Then Вид_доставки.Value = "Легковой транспорт"
If (Суммарный_вес_заказа.Value >= 23) Or (Суммарный_объем_заказа.Value > 25000) Then Вид_доставки.Value = "Грузовой транспорт"
If Вид_доставки.Value = "Курьер" Then Стоимость_доставки.Value = 250
If Вид_доставки.Value = "Легковой транспорт" Then Стоимость_доставки.Value = 350 + Удаленность_МКАД_км.Value * 15
If Вид_доставки.Value = "Грузовой транспорт" Then Стоимость_доставки.Value = 450 + Удаленность_МКАД_км.Value * 20
9. При обращении к форме «Оформление заказа», эмулирующей подобный функционал сайта при редактировании поля «Удаленность_от_МКАД_км» на форме «Доставка» осуществляется пересчет стоимости доставки в зависимости от его значения
Private Sub Удаленность_МКАД_км_LostFocus()
If Вид_доставки.Value = "Курьер" Then Стоимость_доставки.Value = 250
If Вид_доставки.Value = "Легковой транспорт" Then Стоимость_доставки.Value = 350 + Удаленность_МКАД_км.Value * 15
If Вид_доставки.Value = "Грузовой транспорт" Then Стоимость_доставки.Value = 450 + Удаленность_МКАД_км.Value * 20
End Sub
10. При обращении к форме «Оформление заказа», эмулирующей подобный функционал сайта при редактировании поля «Логин» проверяется условие на его существование в БД для возможности оформления заказа
Dim i As Long, f As Boolean
Список144.Requery
Me![Список144].SetFocus
Список144.ListIndex = 0
f = False
For i = 0 To Список144.ListCount - 1
Список144.ListIndex = i
If Список144.Value = Логин.Value Then f = True
Next i
If f = False Then MsgBox ("Сначала зарегистрирутесь")
End Sub
Аналогичным образом происходит проверка при обращении к форме «Оценка товара клиентом», эмулирующей подобный функционал сайта
11. При обращении к форме «Регистрация», эмулирующей подобный функционал сайта при регистрации нового пользователя проверяются условия на обязательность заполнения определенных полей
Private Sub Кнопка70_Click()
On Error GoTo Err_Кнопка70_Click
Dim stDocName As String
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1073) & ChrW(1072) & ChrW(1074) & ChrW(1080) & ChrW(1090) & ChrW(1100) & ChrW(32) & ChrW(1088) & ChrW(1077) & ChrW(1075) & ChrW(1080) & ChrW(1089) & ChrW(1090) & ChrW(1088) & ChrW(1072) & ChrW(1094) & ChrW(1080) & ChrW(1102)
DoCmd.OpenQuery stDocName, acNormal, acEdit
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1073) & ChrW(1072) & ChrW(1074) & ChrW(1080) & ChrW(1090) & ChrW(1100) & ChrW(32) & ChrW(1090) & ChrW(1077) & ChrW(1083) & ChrW(1077) & ChrW(1092) & ChrW(1086) & ChrW(1085) & ChrW(32) & ChrW(49)
DoCmd.OpenQuery stDocName, acNormal, acEdit
If Поле92 <> "" Then
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1073) & ChrW(1072) & ChrW(1074) & ChrW(1080) & ChrW(1090) & ChrW(1100) & ChrW(32) & ChrW(1090) & ChrW(1077) & ChrW(1083) & ChrW(1077) & ChrW(1092) & ChrW(1086) & ChrW(1085) & ChrW(32) & ChrW(50)
DoCmd.OpenQuery stDocName, acNormal, acEdit
End If
If Поле100 <> "" Then
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1073) & ChrW(1072) & ChrW(1074) & ChrW(1080) & ChrW(1090) & ChrW(1100) & ChrW(32) & ChrW(1090) & ChrW(1077) & ChrW(1083) & ChrW(1077) & ChrW(1092) & ChrW(1086) & ChrW(1085) & ChrW(32) & ChrW(51)
DoCmd.OpenQuery stDocName, acNormal, acEdit
End If
If Номер_кред_карты <> "" Then
stDocName = ChrW(1044) & ChrW(1086) & ChrW(1073) & ChrW(1072) & ChrW(1074) & ChrW(1080) & ChrW(1090) & ChrW(1100) & ChrW(32) & ChrW(1082) & ChrW(1088) & ChrW(1077) & ChrW(1076) & ChrW(1080) & ChrW(1090) & ChrW(1085) & ChrW(1091) & ChrW(1102) & ChrW(32) & ChrW(1082) & ChrW(1072) & ChrW(1088) & ChrW(1090) & ChrW(1091)
DoCmd.OpenQuery stDocName, acNormal, acEdit
End If
DoCmd.SetWarnings False
If Me.Dirty Then Me.Dirty = False
DoCmd.Close
Exit_Кнопка70_Click:
Exit Sub
Err_Кнопка70_Click:
MsgBox Err.Description
Resume Exit_Кнопка70_Click
End Sub
Дата: 2019-12-10, просмотров: 238.