Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
my_clientservTechDBMS_2012.doc.doc
Скачиваний:
17
Добавлен:
13.11.2019
Размер:
1.55 Mб
Скачать

5.3 Разработка клиент-серверных приложений баз данных с различными сценариям доступа к данным

В качестве базы данных для примера (рис. 5.6), будет использована значительно упрощенная база данных, для хранения информации об авторах, книгах и издателях.

Рис 5.6 Схема тестовой базы данных

Существует список авторов (Authors) и издателей (Publishers). Также существует список книг (Books). Каждая книга может быть написана несколькими авторами, и принадлежать только одному издательству, у книги есть цена, которая не может быть менее 1 у.е. и более 1000 у.е., так же у книги есть дата публикации.

Итак, со схемой определились. Теперь приступим к созданию базы данных и наполнению ее тестовыми данными.

Открываем "SQL Server Management Studio" (Рис. 5.7):

Рис 5.7. Запуск "SQL Server Management Studio"

Жмем кнопку "New Query" (Рис 5.8):

Рис 5.8. Создание нового запроса в SSMS

Копируем t-sql из листинга 1:

USE [master]

GO

IF EXISTS(SELECT 1 FROM sys.databases WHERE name='BookShop')

DROP DATABASE [BookShop]

CREATE DATABASE [BookShop]

GO

USE [BookShop]

GO

CREATE TABLE [Authors]

(

Id int IDENTITY(1,1) NOT NULL,

Name nvarchar(150) NULL

)

GO

CREATE TABLE [Books]

(

Id int IDENTITY(1,1) NOT NULL,

Name nvarchar(250) NOT NULL,

Description nvarchar(500) NULL,

IdPublisher int NOT NULL,

Price float NOT NULL,

PublishedAt datetime NOT NULL

)

GO

CREATE TABLE [BooksToAuthors]

(

IdBook int NOT NULL,

IdAuthor int NOT NULL

)

GO

CREATE TABLE [Publishers]

(

Id int IDENTITY(1,1) NOT NULL,

Name nvarchar(150) NOT NULL

)

GO

ALTER TABLE Authors ADD CONSTRAINT PK_Authors

PRIMARY KEY (Id)

GO

ALTER TABLE Books ADD CONSTRAINT PK_Books

PRIMARY KEY (Id)

GO

ALTER TABLE BooksToAuthors ADD CONSTRAINT PK_BooksToAuthors

PRIMARY KEY (IdBook,IdAuthor)

GO

ALTER TABLE Publishers ADD CONSTRAINT PK_Publishers

PRIMARY KEY (Id)

GO

ALTER TABLE Books ADD CONSTRAINT FK_Books_Publishers

FOREIGN KEY (IdPublisher) REFERENCES Publishers(Id)

GO

ALTER TABLE BooksToAuthors ADD CONSTRAINT FK_BooksToAuthors_Books

FOREIGN KEY (IdBook) REFERENCES Books(Id)

GO

ALTER TABLE BooksToAuthors ADD CONSTRAINT FK_BooksToAuthors_Author

FOREIGN KEY (IdAuthor) REFERENCES Authors(Id)

GO

Листинг 1. Скрипт для создания схемы базы данных

Жмем кнопку "Execute" (Рис. 5.9):

Рис 5.9 Запуск запроса

В результате в окне сообщения должны получить "Command(s) completed successfully".

Следующий шаг - заполнение только что созданной базы данных. Для этого выполняем запрос из листинга 2.

USE [BookShop]

GO

DELETE FROM BooksToAuthors

DELETE FROM Books

DELETE FROM Authors

DELETE FROM Publishers

INSERT INTO Authors (Name) VALUES ('Endrew Troelsen')

INSERT INTO Authors (Name) VALUES ('Matthew MacDonald')

INSERT INTO Authors (Name) VALUES ('Mario Szpuszta')

INSERT INTO Authors (Name) VALUES ('Eugene Kartsev')

INSERT INTO Publishers (Name) VALUES ('Apress')

INSERT INTO Publishers (Name) VALUES ('Williamspublishing')

INSERT INTO Publishers (Name) VALUES ('WROX')

INSERT INTO Books (Name, Description, IdPublisher, Price, PublishedAt)

VALUES ('Pro ASP.NET 3.5 in C#2008', '', (SELECT Id FROM Publishers WHERE Name='Apress'), '350.9900', GETDATE())

INSERT INTO Books (Name, Description, IdPublisher, Price, PublishedAt)

VALUES ('Another Interesting Book about .NET', '', (SELECT Id FROM Publishers WHERE Name='WROX'), '199.10', GETDATE())

INSERT INTO Books (Name, Description, IdPublisher, Price, PublishedAt)

VALUES ('Silverlight 2.0', '', (SELECT Id FROM Publishers WHERE Name='Williamspublishing'), '230.50', GETDATE())

INSERT INTO Books (Name, Description, IdPublisher, Price, PublishedAt)

VALUES ('Mu-mu, the beginning', '', (SELECT Id FROM Publishers WHERE Name='Apress'), '1.99', GETDATE())

INSERT INTO BooksToAuthors (IdBook, IdAuthor)

VALUES ((SELECT Id FROM Books WHERE Name='Pro ASP.NET 3.5 in C#2008'), (SELECT Id FROM Authors WHERE Name='Matthew MacDonald'))

INSERT INTO BooksToAuthors (IdBook, IdAuthor)

VALUES ((SELECT Id FROM Books WHERE Name='Pro ASP.NET 3.5 in C#2008'), (SELECT Id FROM Authors WHERE Name='Mario Szpuszta'))

INSERT INTO BooksToAuthors (IdBook, IdAuthor)

VALUES ((SELECT Id FROM Books WHERE Name='Another Interesting Book about .NET'), (SELECT Id FROM Authors WHERE Name='Endrew Troelsen'))

INSERT INTO BooksToAuthors (IdBook, IdAuthor)

VALUES ((SELECT Id FROM Books WHERE Name='Silverlight 2.0'), (SELECT Id FROM Authors WHERE Name='Matthew MacDonald'))

INSERT INTO BooksToAuthors (IdBook, IdAuthor)

VALUES ((SELECT Id FROM Books WHERE Name='Mu-mu, the beginning'), (SELECT Id FROM Authors WHERE Name='Eugene Kartsev'))

Листинг 2. Скрипт для наполнения БД тестовыми данными

Итак, тестовая база данных готова. Можно приступать к созданию сайта на основе ASP.NET Dynamic Data, но прежде следует сделать несколько замечаний.

Очень важно, чтобы структура базы данных была правильная (под правильностью понимается соответствие 3НФ). Данное требование особо остро ощущается при создании приложений на основании Dynamic Data или приложений, использующих автоматически сгенерированную схему классов LINQ2SQL. Но обо всем по порядку.

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