Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_собственные.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
701.16 Кб
Скачать

23. Связи между таблицами: объект DataRelation

Вся мощь автономного уровня проявляется тогда, когда объект DataSet содержит несколько взаимосвязанных объектов DataTable. М-ду таблицами могут быть связи. Они представлены объектом DataRelation. В коллекцию данного DataSet можно вставить любое кол-во объектов DataRelation, к-ые описывают все взаимосвязи таблиц. Эти объекты позволяют клиентскому уровню выполнять навигацию м-ду данными таблицам без обращения к сети.

Наконец, в таблицах есть первичные и вторичные ключи – объект Constraint со своими двумя подклассами UniqueConstraint и ForeighKeyConstraint описывают их. Отметим, объекты программы и соотв-щие объекты БД-ых не эквивалентны.

В классе DataSet определяется свойство Relations – набор объектов – представителей класса DataRelations. Каждый такой объект определяет связи между составляющими объект DataSet объектами DataTable (таблицами). Если в DataSet более одного набора DataTable, набор DataRelations будет содержать несколько объектов типа DataRelation. Каждый объект определяет связи между таблицами DataTable. Таким образом, в объекте DataSet реализуется полный набор элементов для управления данными, включая сами таблицы, ограничения и отношения между таблицами.

(Работу со связанными таблицами БД BDTur_firma см. Лабораторная работа5_3.doc!!!)

DataRelation dr1 = new DataRelation("Turisti", ds.Tables["Туристы"].Columns["[Код туриста]"], ds.Tables["Информация о туристах"].Columns["[Код туриста]"]);

ds.Relations.Add(dr1);

DataRelation dr2 = new DataRelation("Putewki", ds.Tables["Информация о туристах"].Columns["[Код туриста]"], ds.Tables["Путевки"].Columns["[Код туриста]"]);

ds.Relations.Add(dr2);

DataRelation dr3 = new DataRelation("Oplati", ds.Tables["Путевки"].Columns["[Код путевки]"], ds.Tables["Оплаты"].Columns["[Код путевки]"]);

ds.Relations.Add(dr3);

DataRelation dr4 = new DataRelation("Sezoni", ds.Tables["Сезоны"].Columns["[Код сезона]"], ds.Tables["Путевки"].Columns["[Код сезона]"]);

ds.Relations.Add(dr4);

DataRelation dr5 = new DataRelation("Turi", ds.Tables["Туры"].Columns["[Код тура]"], ds.Tables["Сезоны"].Columns["[Код тура]"]);

ds.Relations.Add(dr5);

В загруженных таблицах не формируются автоматически все нужные объекты, в некоторых случаях необходимо сделать это самостоятельно. Сами объекты имеют также довольно тонкую и сложную структуру, поэтому это было бы довольно грубым приближением. Однако, на первых порах, для понимания сути полезно помнить следующие соотношения:

DataSet = <одна или несколько таблиц> = <один или несколько объектов DataTable>.

DataTable = <таблица>.

DataTable = <таблица> = <множество полей, столбцов, колонок> =

= <множество объектов DataColumn>.

DataTable = <таблица> = <множество строк> = <множество объектов DataRow>.

DataColumn = <столбец, поле, колонка>.

DataRow = <строка>.

DataRelation = <связь между таблицами>.

Возникает вопрос: для чего нужны эти объекты, если можно обходится и без них для вывода содержимого таблицы, например в элемент DataGridView? Дело в том, что для простого отображения информации создавать эти объекты не требуется, но в этом случае все данные будут однородными текстовыми переменными, подобно таблицам в документе Microsoft Word. DataSet не может сам сформировать структуру данных – тип переменных, первичные и вторичные ключи, связи между таблицами. Для управления такой структурой, для ее адекватного отображения (например, вывод информации с привязкой к элементам, создаваемым в режиме работы приложения) и нужно определение этих объектов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]