Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Логическая модель




ЗАКЛЮЧЕНИЕ

Контрольные вопросы и задания к разделу 4

Вспомогательные классы

Класс HashTable

Hashtable - это структура данных, предназначенная для осуществления быстрого поиска. Это достигается за счет связывания ключа с каждым объектом, который сохраняется в таблице. Hashtable - это объект, в котором хранятся пары значений: так называемый ключ и само значение. Элементы каждой коллекции - и ключей (Keys), и значений (Values) - являются типом object, а это значит, что в качестве индекса элемента в привычном понимании теперь выступает не int, а именно object!

Создадим новое консольное приложение. Листинг этого приложения:

using System;
using System.Collections;
namespace HashtableExample {
class Statistics
{
public Hashtable AbonentList;
public Statistics() {
AbonentList = new Hashtable();
}
}

class Abonent {
public string Name;
public int Phone;
public Abonent(string n, int p) {
Name = n;
Phone = p;
}
}
class Class1 {
[STAThread]
static void Main(string[] args) {
Abonent a1 = new Abonent ( “Иванов ", 1234567);
Abonent a2 = new Abonent(“Николаев ", 3216547);
Abonent a3 = new Abonent (" Андреева ", 685472);
Abonent a4 = new Abonent (“ Волков ", 1234500);
Abonent a5 = new Abonent (" Киpилловa ", 3245637);
Statistics myStatistics = new Statistics();
myStatistics.AbonentList.Add(a1.Phone, a1.Name);
myStatistics.AbonentList.Add(a2.Phone, a2.Name);
myStatistics.AbonentList.Add(a3.Phone, a3.Name);
myStatistics.AbonentList.Add(a4.Phone, a4.Name);
myStatistics.AbonentList.Add(a5.Phone, a5.Name);
Console.WriteLine(myStatistics.AbonentList[685472]);
}
}
}

В методе Main создаются пять объектов класса Abonent, которые затем добавляются в Hashtable AbonentList (myStatistics.AbonentList) в коллекцию Values. Ключами для этих элементов будут служить значения их полей Phone. Обратите внимание, что метод Add() класса Hashtable требует два параметра: значение первого аргумента будет выступать в роли ключа для элемента, которым является значение второго аргумента.

Результатом выполнения программы будет вывод фамилии абонента, с заданным номером телефона (ключом) (рис. 134).

Рис. 134. Работа с классом HashTable.

Класс ArrayList

 

Класс ArrayList, подобно классу Hashtable, определенный в пространстве имен System.Collections, представляет собой один из чрезвычайно простых и удобных способов работы с наборами элементов. Объекты этого класса не имеют фиксированного размера и при необходимости могут менять его. Объект ArrayList при своем создании резервирует место в памяти для 16 элементов - указателей на тип object. При добавлении семнадцатого элемента размерность ArrayList увеличивается до 32 элементов. Обращение к объектам осуществляется аналогично обращению к элементам массива.

Создадим новое консольное приложение. Ниже приводится его полный его листинг.

using System;
using System.Collections;
namespace ClassArrayList {
class Class1 {
[STAThread]
static void Main(string[] args)
{
ArrayList ar = new ArrayList();
ar.Add("A");
ar.Add("AB");
ar.Add("ABC");
ar.Add("ABCD");
ar.Add("ABCDE");
ar.Add("ABCDEF");
ar.Add("ABCDEFG");
ar.Add("ABCDEFGH");
ar.Add("");
ar.Add("");
Console.WriteLine("Вывод элементов массива:\n");
foreach (object element in ar) {
Console.WriteLine(element);
}
ar.Remove("ABCD");
Console.WriteLine("Удaлeниe элемента:\n");
foreach (object element in ar) {
Console.WriteLine(element);
}
ar.Insert(6, "XYZ");
Console.WriteLine("Вставка элемента \nHa заданную позицию\n");
foreach (object element in ar) {
Console.WriteLine(element);
}
ar.Clear();
Console.WriteLine("Удaлeниe всех элементов:\n");
foreach (object element in ar) {
Console.WriteLine(element);
}
} // end Main()
} // end class
} // end namespace

Результат работы приложения приведен на рисунке 135.

Рис. 135. Работа с классом ArrayList

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

 

1. Соберите приложение примера, описанного в п. 4.1.2.

2. Повторите приложение-пример из п. 4.1.3.

3. Создайте приложение, в котором для соединения с базой данных используйте строку с несуществующим именем файла БД, выведите на экран в обработчике ошибок подключения к БД номер ошибки, ее тип и причину.

4. Поэкспериментируйте на базе любого уже созданного приложения БД с пулом соединений. Что изменится в работе приложения при отказе приложения использовать пул соединений? Как влияют на его работу другие параметры управления пулом соединений (табл. 12)?

5. Постройте UML-диаграмму взаимодействия обектов или диаграмму последователности, описывающую реализацию метода btnFillClick (п. 4.1.3).

6. Исследуйте с помощью документции возможности использования события InfoMessage (табл. 9).

7. Создайте хранимые процедуры, описанные в примерах (табл. 13), и проверьте их работу.

8. Создайте приложение, вызывающее любую из хранимых процедур предыдущего (7-го) задания.

9. Создайте хранимые процедуры для запросов, разработанных вами по заданиям к разделу 2 (п. 2.6).

10. Создайте приложение, вызывающее любую из хранимых процедур предыдущего (9-го) задания.

11. Создайте хранимые процедуры, описанные в примерах (табл. 14), при помощи встроенного шаблона программы SQL Management Studio и проверьте их работу. Создайте приложение, вызывающее любую из этих хранимых процедур.

12. Создайте хранимые процедуры, описанные в примерах (табл. 15), с помощью средств среды Visual Studio 2008 и проверьте их работу. Создайте приложение, вызывающее любую из этих хранимых процедур.

13. Создайте элементарные приложения для вывода содержимого таблицы «Туристы» такие же, как показано на рисунках 75 и 76.

14. Испытайте оба способа создания и инициализации объекта Command (п.4.3.2) в приложениях задания 13. Соберите также оба варианта приложений: для работы с БД Microsoft Access и БД Microsoft SQL Server.

15. Самостоятельно соберите приложение, описанное в п. 4.3.2, для демонстрации использования свойств CommandType и CommandText объекта Command.

16. Каковы назначение и область применения методов ExecuteNonQuery, ExecuteScalar, ExecuteReader объекта Command?

17. Каковы назначение и способы применения параметризованных запросов к базе данных?

18. Расширьте функциональные возможности примера Windows-приложения, описанного в п. 4.3.3 (рис. 87 - 90), демонстрацией возможностей метода ExecuteScalar объекта Command добавлением вывода полей изменяемой записи БД и/или сообщения о соответствующем изменении БД в область главного окна приложения.

19. Каковы назначение и способы применения транзакций в БД?

20. Выделите в построенных вами по заданиям данного пособия запросах к БД возможные нарушения целостности данных и опишите данные запросы в виде танзакций. Исследуйте эти запросы с помощью консольных приложений, как это сделано в примере приложения EasyTransaction (рис. 101, 102).

21. Какие столбцы (имя и тип данных) добавлены в таблицу «Questions» и в таблицу «Variants» (см. «Программное создание объектов DataTable и DataColumn» в п 4.4.1)?

22. Какие ограничения БД можно задавать с помощью свойств объекта DataTable?

23. Опираясь на материал п. 4.4.1, разработайте приложение, создающее набор данных dsTests (объект DataSet), состоящий из двух связанных по полю questID таблиц (объектов DataTable) «Вопросы» (Questions) и «Варианты ответов» (Variants), при этом связь между таблицами должна иметь ограничения вида ForeignKeyConstraint.

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

Решение выдвинутых проблем предлагается в рассмотренной в данном пособии технологии ADO.NET, разработанной компанией Microsoft, и включенной в их новую платформу.NET Framework. ADO.NET, как часть Microsoft.NET Framework, представляет собой набор средств и слоев, позволяющих приложению легко управлять и взаимодействовать со своим файловым или серверным хранилищем данных (рис 136).

Рис. 136. Место ADO.NET в организации доступа к данным

ADO.NET наследует предыдущую технологию доступа к данным, разработанную Microsoft, которая называется классической ADO, или просто ADO. Хотя ADO.NET и ADO - это полностью различные архитектуры доступа к данным.

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

Как и любая другая технология, ADO.NET состоит из нескольких важных компонентов. Все классы.NET группируются в пространства имен. Все функции, относящиеся к ADO.NET, находятся в пространстве имен System.Data. Кроме того, как и любые другие компоненты.NET, ADO.NET работает не изолировано и может взаимодействовать с различными другими компонентами.NET.

Архитектуру ADO.NET можно разделить на две фундаментальные части: подключаемую и автономную. Все классы в ADO. NET можно поделить по этому критерию. Единственное исключение составляет класс DataAdapter, который является посредником между подключенной и автономной частями ADO.КЕТ.

Подключаемая часть ADO.NЕТ представляет собой набор объектов подключений. Объекты подключений разделяются в ADO.NET по конкретным реализациям для различных СУБД. То есть для подключения к базе данных SQL SERVER имеется специальных класс SqlConnection. Эти отдельные реализации для конкретных СУБД называются поставщиками данных.NET.

В подключаемой части ADO.NET имеются следующие основные классы:

Connection. Этот класс, позволяющий устанавливать подключение к источнику данных (OleDbConnection, SqlConnection, OracleConnection).

Transaction. Объект транзакций (OleDbTransaction, SqlTransaction, Oracle- Transaction). В ADO.NET имеется пространство имен System.Transaction.

DataAdapter. Это своеобразный шлюз между автономными и подключенными аспектами ADO.NET. Он устанавливает подключение, и если подключение уже установлено, содержит достаточно информации, чтобы воспринимать данные автономных объектов и взаимодействовать с базой данных. (DataAdapter - SqlDataAdapter, OracleDataAdapter)

Command. Это класс, представляющий исполняемую команду в базовом источнике данных.

Parameter. Объект параметр команды.

DataReader. Это эквивалент конвейерного курсора с возможностью только чтения данных в прямом направлении.

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

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

Приложение должно разделять дорогостоящий ресурс - открытое подключение - и совместно использовать его с другими пользователями. Для этих целей введен пул подключений. По умолчанию пул подключений включен. При запросе ADO. NET неявно проверяет, имеется ли доступное неиспользуемое физическое подключение к базе данных. Если такое подключение имеется, то оно и используется. Для принятия решения, имеется ли такое физическое подключение или нет, ADO.МЕТ учитывает загрузку приложения, и если поступает слишком много одновременных запросов, ADO.^ЕТ может удерживать одновременно открытыми несколько физических подключений, то есть увеличивать при необходимости количество подключений.

Вторым наиболее ресурсоемким объектом в ADO.NET являются транзакции, отвечающие за корректность изменений в БД. Транзакции - это набор операций, которые для обеспечения целостности и корректного поведения системы должным быть выполнены успешно или неудачно только все вместе. Обычно транзакции следуют определенным правилам, известным как свойства ACID, это: неделимость (Atomic), согласованность (Consistent), изолированность (Isolated) и долговечность (Durable). Для гибкого управления поведением транзакций используются уровни изоляции, которые описаны в перечислении IsolationLevel, это: Chaos, ReadUncommited, ReadCommited, RepeatableRead, Snapshot, Serializable.

В ADO.NET реализован мощный механизм поддержки транзакций БД. Сама технология ADO.NET поддерживает транзакции одиночной БД, которые отслеживаются на основании подключений. Но она может задействовать пространство имен System.Transactions для выполнения транзакций с несколькими БД или транзакций с несколькими диспетчерами ресурсов.

В ADO.NET класс подключений используется для начала транзакции.

Все управляемые в.NET поставщики, доступные в.NET Framework OleDb, SqlClient, OracleClient, ODBC имеют свои собственные реализации класса транзакций. Все эти классы реализуют интерфейс IDbTransaction из пространства имен System.Data.

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

Одни лишь подключенные приложения не удовлетворяют всем требованиям, предъявляемым к современным распределенным приложениям. В автономных приложениях, созданных с помощью ADO.NET, используют иной подход. Для обеспечения автономности используются объекты DataAdapter. Они осуществляют выполнение запросов, используя для этого объекты подключения. А результаты выполнения, то есть данные, передает автономным объектам. Благодаря такому принципу автономные объекты не знают о существовании объектов подключения, так как напрямую не работают с ними. Таким образом, реализация объекта, хранящего данные, не зависит от конкретного поставщика данных, а именно от СУБД. Поскольку конкретная реализация адаптера данных зависит от соответствующего источника данных, конкретные адаптеры данных реализованы в составе конкретных поставщиков.

Автономные приложения обычно подключаются к базе как можно позже и отключаются как можно раньше. Важным элементом в такой схеме подключения и предоставления автономного доступа к данным является контейнер для табличных данных, который не знает о СУБД. Такой незнающий о СУБД автономный контейнер для табличных данных представлен в библиотеках ADO.NET классом DataSet или DataTable.

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

Напомним несколько основных классов автономной модели ADO.NET:

DataSet. Класс DataSet является ядром автономного режима доступа к данным в ADO.NET. Лучше всего рассматривать его с позиции, как будто в нем есть своя маленькая СУБД, полностью находящаяся в памяти.

DataTable. Больше всего этот класс похож на таблицу БД. Он состоит из объектов DataColumn, DataRow, представляющих из себя строки и столбцы.

DataView. Это объект представлений базы данных.

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

Технология ADO.NET в полной мере способна предоставить механизм для доступа к любому источнику данных, тем самым давая разработчику мощный механизм взаимодействия с базами данных, способный в полной мере реализовать все потребности, возникающие при проектировании ИС.

 

41. Работа с базами данных на C#. Урок 1. Введение в SQL сервер.

Изучение программирования баз данных на C# мы начнем с того, что при помощи Microsoft SQL Server 2005 создадим базу данных SQL. Для начала нам надо запустить программу "Среда Microsoft SQL Server Management Express":

Если у нас соединение не создано, то нам его нужно создать. Создано или нет, вы узнаете при запуске программы. Если у нас уже есть база данных, то при входе в SQL- сервер у вас будет вот такая картинка:

В этом случае мы можем войти (кнопка "Соединить") в нее и увидеть что то вроде этого:

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

Для создания базы данных нужно в графе "Файл базы данных" указать "Новая база данных":

У вас окно, в котором нужно ввести имя файла для создаваемой базы, выбрать язык и пароль доступа к базе данных:

После этого база данных будет создана и мы можем в нее войти:

И так, мы научились создавать базу данных. Теперь попробуем создать в ней таблицу. И так, мы вошли в базы данных и увидели ее структура. Щелкаем по ветке "Таблицы" правой кнопкой мыши и выбираем пункт "Создать таблицу":

Далее у вас откроется окно редактирования структуры таблицы. Введите туда какие нибудь столбцы, например, вот такие:

После чего у вас появится созданная таблица в ветке таблиц:

И так, вы научились создавать базу данных и таблицы. На следующем уроке будем учиться подключать базу данных SQL к проекту Visual Studio 2010.

 

42. Работа с базами данных на C#. Урок 2. Подключение базы данных SQL к проектуVisual Studio 2010

На прошлом уроке мы создали базу данных SQL. Сегодня подключим эту базу данных к программе на C# через Visual Studio 2010.

И так, добавляем компонент DataGridView:

Затем нам надо выбрать источник данных, в данном случае придется создать новый источник данных:

У нас откроется мастер настройки источника данных. Выберем "База данных" и нажмем кнопочку "Далее":

Тут у нас выбора особого нет: "Набор данных" и жмем кнопочку "Далее":

Далее, у нас идет диалог выбора подключения соединения с базой данных. У меня уже есть подключение, но у вас, возможно, никаких подключений не будет, так что смело жмите кнопочку "Создать подключение":

При этом у вас откроется диалог создания подключения, в нем выберем источник данных "Microsoft SQL Server Compact 3.5", укажем путь к созданной базе данных и пароль к ней (его мы задали, когда создавали базу данных на прошлом уроке):

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

На вопрос, копировать ли базу данных в проект, ответим "Нет":

В следующем диалоге опять жмем "Далее":

После чего у нас появиться список данных, доступных для выбора:

выберем созданную нами таблицу:

После нажатия кнопочки "Готово" у нас в компоненте DataGridView отобразятся столбцы выбранной таблицы:

Все, теперь мы можем запустить программу и даже редактировать данные в таблице базы данных:

Правда, пока данные у нас не сохраняются, но вопрос сохранения данных это уже тема следующего урока

Приведенные в статье скриншоты, являются цитатами и иллюстрациями программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft..

43. Работа с базами данных на C#. Урок 3. Сохранение данных.

 

На прошлом уроке мы подключили к проекту на Visual Studio 2010 базу данных SQL. Но наша программа пока еще не умеет сохранять данные. Вот давайте и научим ее этому. Для начала просто добавим к проекту, созданному на прошлом уроке, кнопочку "Сохранить":

В обработчике нажатия на эту кнопку у нас будет всего лишь одна строка:

private void button1_Click(object sender, EventArgs e) { waresTableAdapter.Update(myBaseDataSet); }

Правда, у нас тут возник недочет: кнопочка "Сохранить работает" только если мы добавляем новые строки. А вот стоит только добавить новую строку, у нас программа вываливается по исключению "Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками":

Что бы исправить этот недочет, необходимо задать у адаптера данных UpdateCommand. Вот пример кода:

private void button1_Click(object sender, EventArgs e) { SqlCeCommand command = new SqlCeCommand( "UPDATE wares SET ID = @ID, Name = @Name, Price=@Price "+ "WHERE (ID = @ID)"); command.Connection = waresTableAdapter.Connection; waresTableAdapter.Adapter.UpdateCommand = command;   SqlCeParameter parametr;   //Параметр ID parametr = new SqlCeParameter("@ID", SqlDbType.Int); parametr.SourceColumn = "ID"; command.Parameters.Add(parametr);   //Параметр Name parametr = new SqlCeParameter("@Name", DbType.String); parametr.SourceColumn = "Name"; command.Parameters.Add(parametr);   //Параметр Price parametr = new SqlCeParameter("@Price", SqlDbType.Float); parametr.SourceColumn = "Price"; command.Parameters.Add(parametr);   waresTableAdapter.Update(myBaseDataSet.Wares); }

Теперь мы можем корректно редактировать наименование товара и цену. Единственно, мы не можем редактировать поле ID и должны заводить его вручную при добавлении новой строки, к тому же, ID должен быть уникальным:

Но эту проблему мы будем решать уже в будущих уроках.

Приведенные в статье скриншоты, являются цитатами и иллюстрациями программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft..

44. Работа с базами данных на C#. Урок 4. Немного теории.

И так, мы уже научились создавать базу данных SQL, просматривать и редактировать ее средствами языка C# и Visual Studio 2010 (см. предыдущий урок). Что бы идти дальше, нам надо немного изучить теорию. И так, давайте начнем с терминов и определений.

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

Строки таблицы называются записи. Все они имеют одинаковую структуру, они состоят из полей, в которых хранятся атрибуты объетка:

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

Для того, что бы работать с базой данных, нужна СУБД (Система управления базами данных). СУБД - это специальная программа, библиотека, приложение или сервис, который предназначен для управления базами данных. Любая СУБД должна поддерживать следующий функционал:

· Добавление записей в таблицы.

· Удаление записей из таблицы.

· Обновление данных.

· Поиск данных.

· Управление данными.

Для выполнения этих операций в большинстве СУБД используется механизм запросов. Результатом выполнения запросов является отобранное множество записей из одной или нескольких таблиц баз данных (выборка) или изменения в данных. Запросы формируются на специальном языке запросов SQL (Structured Query Language). Под управлением данными обычно понимают защиту от несанкционированного доступа, поддержку многопользовательского режима работы, резервное копирование, обеспечение целостности данных.

Прежде чем автоматизировать предметную область с использование баз данных (разработать СУБД или специальное приложение), необходимо сначала спроектировать базу данных. Такое проектирование состоит из нескольких этапов:

· Анализ требований. На этом этапе находит ответы на следующие вопросы: Какие элементы данных должны храниться в БД? Кто и как будет с ними обращаться?

· Создание логической модели БД. На этом этапе определяется, как данные будут сгруппированы логически. Структура базы данных на этом этапе выражается в терминах прикладных объектов и отношений между ними.

· Создание физической структуры БД. На этом этапе непосредственно определяется, какие в базе данных будут таблицы и какие у них будут атрибуты.

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

И так, анализ требований:

Допустим, в программе должны храниться следующие данные:

· Наименование товара.

· Цена товара.

· Номер приходной накладной.

· Номер расходной накладной.

· Дата приходной накладной.

· Дата расходной накладной.

· Количество товара, поступившего по накладной.

· Количество товара, списанного по накладной.

· Фамилия менеджера, которому отпущен товар.

· Остаток товара на складе.

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

Например, для нашего случая может быть вот такая функциональная спецификация:

· С программой будут работать кладовщик и бухгалтер.

· Одновременно могут работать два пользователя.

· Ассортимент товаров примерно 1000 наименований.

· В день выписывается примерно 100 накладных.

· Примерно раз в месяц в базу данных заводятся новые наименования товаров, примерно десять наименований.

· Каждая накладная в среднем имеет по 10 строк.

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

· Кладовщику нужно видеть цены товара в любое время.

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

В рамках данной задачи можно выделить следующие объекты:

· Товар.

· Документ складского учета (накладная).

· Таблица остатков товара.

· Таблица движений товара.

· Менеджер.

· Тип накладной.

· Строка накладной.

Между этими объектами может быть следующие отношения:

· Каждая накладная может содержать одну или несколько строк.

· Каждая накладная может иметь тип.

· Каждая строка накладной содержит один товар и его количество.

· Каждая накладная с типом "Расходная" связана с одним менеджером.

· Таблица движений содержит один или несколько товаров.

· Таблица остатков содержит один или несколько товаров.

Теперь перейдем к разработке физической структуры базы данных.

Таблица "Товары"

Атрибут Тип Описание
Код Число Уникальный код товара
Наименование Строка Наименование товара
Цена Число Цена товара

Таблица "Накладные"

Атрибут Тип Описание
Код Число Уникальный код накладной (номер)
Дата Дата Дата накладной
Менеджер Число Код менеджера из таблицы менеджеров
Тип Число Код типа накладной из таблицы типов накладных

Таблица "Типы накладных"

Атрибут Тип Описание
Код Число Уникальный код типа накладной
Движение Число -1 - расход, 1 - приход
Наименование Строка Наименование типа накладных

Таблица "Строки накладных"

Атрибут Тип Описание
Код Число Код накладной из таблицы накладных
Товар Число Код товара из таблицы товаров
Количество Число Количество товаров

Таблица "Менеджеры"

Атрибут Тип Описание
Код Число Уникальный код менеджера
Наименование Строка Фамилия, имя, отчество менеджера

Таблица "Движения товаров"

Атрибут Тип Описание
Товар Число Код товара из таблицы товаров
Количество Число Количество товаров
Движение Число -1 - расход, 1 - приход
Накладная Число Код накладной из таблицы товаров

Таблица "Остатки товаров"

Атрибут Тип Описание
Товар Число Код товара из таблицы товаров
Количество Число Количество товаров

Может возникнуть вопрос: а зачем дублировать код товара и движение в таблице движений товара? Действительное, код товара есть строках накладных, движения - в типах. Но, дело в том, для доступа к этим данных компьютер будет затрачивать время. А предложенная мной структура существенно ускорит построение отчетов: программе не нужно будет тратить время на поиск кода товара в таблице строк накладных и вида движения в таблице типов накладных. Во вторых, такая схема общепринятая для учетных систем: документы хранятся отдельно, движения отдельно. Мало ли, вдруг мы в будущем у нас появится еще один склад и мы заходим в программу ввести возможность многоскладского учета и добавим новый тип накладной: "Межскладское перемещение", которая будет делать два движения и приход, и расход. Если бы у нас в таблице движений были строки накладных, то пришлось бы переписывать алгоритм построение отчетов, а так только придется переделать только алгоритм проведения накладных, программу построения отчетов уже переписывать не надо.

Приведенные в статье скриншоты, являются цитатами и иллюстрациями программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft..

45. Работа с базами данных на C#. Урок 5. Создание таблицы в Access.

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

На прошлом уроке мы разработали структуру базы данных программы складского учета. Сегодня мы попробуем создать эту базу данных в Microsoft Access. И так, заходим в Microsoft Access, выбираем опцию "Создать":

Далее, выбираем путь к базе данных и жмем "Создать":

После этого мы перейдем к созданию таблиц. Новую таблицу создаем на закладке "Создание":

Что бы переименовать таблицу, надо войти в режим конструктора, щелкнув правой кнопкой мышки на закладке таблицы:

У нас высветиться окно редактирования имени таблицы:

В режиме конструктора редактируем список полей:

Таблицу так же можно переименовать, щелкнув по ней правой кнопочкой мыши:

Если таблица открытая, то программа не даст переименовать ее, таблицу надо сначала закрыть:

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

и таблицу менеджеров:

Теперь создаем SQL-запрос, можно через конструктор запросов:

Выбираем таблицы, которые будут участвовать в запросе:

В данном случае это "Менеджеры" и "Накладные". Между ними установим связи, таблицу накладных сделаем слева, а свяжем поля "Менеджер" и "Код". Для этого захватим мышкой поле "Менеджер" и перетащим на поле "Код", что бы между ними образовалась связь:

Так же нам надо настроить поля запроса:

Что бы посмотреть сам SQL-запрос, перейдем в режим запроса, щелкаем по закладке запроса правой кнопкой мыши:

и видим текст SQL запроса:

Заменяем в запросе слово INNER на LEFT (внутреннее соединение заменим на левое):

В режиме таблицы:

мы увидим результат запроса:

как видим, SQL-запрос работает, в таблицу подставляется соответствующая фамилия менеджера:

И так, мы изучали, как в Access создавать таблицы базы данных и как устанавливать связи между таблицам. Далее будет изучать язык SQL и как работать с такими таблицами средствами языка C#.

Приведенные в статье скриншоты, являются цитатами и иллюстрациями программного продукта "Microsoft Access", авторское право на который принадлежит корпорации Microsoft..




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 1707; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.195 сек.