Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
Шрифт:
Интервал:
Закладка:
) ON [PRIMARY]
) ON [PRIMARY]
GO
Создание таблицы CreditRisks
Финальная таблица CreditRisks будет применяться для представления покупателей, связанных с кредитным риском. Создайте новый запрос, введите следующие команды SQL и щелкните на кнопке Run (или нажмите <F5>):
USE [AutoLot]
GO
CREATE TABLE [dbo].[CreditRisks](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[CustomerId] [int] NOT NULL,
[TimeStamp] [timestamp] NULL,
CONSTRAINT [PK_CreditRisks] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
GO
Создание отношений между таблицами
В последующих разделах будут добавляться отношения внешнего ключа между взаимосвязанными таблицами.
Создание отношения между таблицами Inventory и Makes
Откройте окно нового запроса, введите показанные далее команды SQL и щелкните на кнопке Run (или нажмите <F5>):
USE [AutoLot]
GO
CREATE NONCLUSTERED INDEX [IX_Inventory_MakeId] ON [dbo].[Inventory]
(
[MakeId] ASC
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Inventory]
WITH CHECK ADD CONSTRAINT [FK_Make_Inventory] FOREIGN
KEY([MakeId])
REFERENCES [dbo].[Makes] ([Id])
GO
ALTER TABLE [dbo].[Inventory] CHECK CONSTRAINT [FK_Make_Inventory]
GO
Создание отношения между таблицами Inventory и Orders
Откройте окно нового запроса, введите следующие команды SQL и щелкните на кнопке Run (или нажмите <F5>):
USE [AutoLot]
GO
CREATE NONCLUSTERED INDEX [IX_Orders_CarId] ON [dbo].[Orders]
(
[CarId] ASC
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Orders]
WITH CHECK ADD CONSTRAINT [FK_Orders_Inventory] FOREIGN
KEY([CarId])
REFERENCES [dbo].[Inventory] ([Id])
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Inventory]
GO
Создание отношения между таблицами Orders и Customers
Откройте окно нового запроса, введите приведенные ниже команды SQL и щелкните на кнопке Run (или нажмите <F5>):
USE [AutoLot]
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_Orders_CustomerId_CarId] ON [dbo].[Orders]
(
[CustomerId] ASC,
[CarId] ASC
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Orders]
WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN
KEY([CustomerId])
REFERENCES [dbo].[Customers] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers]
GO
Создание отношения между таблицами Customers и CreditRisks
Откройте окно нового запроса, введите приведенные ниже команды SQL и щелкните на кнопке Run (или нажмите <F5>):
USE [AutoLot]
GO
CREATE NONCLUSTERED INDEX [IX_CreditRisks_CustomerId] ON [dbo].[CreditRisks]
(
[CustomerId] ASC
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CreditRisks]
WITH CHECK ADD CONSTRAINT [FK_CreditRisks_Customers]
FOREIGN KEY([CustomerId])
REFERENCES [dbo].[Customers] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[CreditRisks] CHECK CONSTRAINT [FK_CreditRisks_Customers]
GO
На заметку! Наличие столбцов FirstName/LastName и отношение с таблицей преследует здесь только демонстрационные цели. В главе 23 они будут задействованы в более интересном сценарии.
Создание хранимой процедуры GetPetName
Позже в главе вы узнаете, как использовать ADO.NET для вызова хранимых процедур. Возможно, вам уже известно, что хранимые процедуры — это подпрограммы кода, хранящиеся внутри базы данных, которые выполняют какие-то действия. Подобно методам C# хранимые процедуры могут возвращать данные или просто работать с данными, ничего не возвращая. Добавьте одиночную хранимую процедуру, которая будет возвращать дружественное имя автомобиля на основе предоставленного carId. Откройте окно нового запроса и введите следующую команду SQL:
USE [AutoLot]
GO
CREATE PROCEDURE [dbo].[GetPetName]
@carID int,
@petName nvarchar(50) output
AS
SELECT @petName = PetName from dbo.Inventory where Id = @carID
GO
Щелкните на кнопке Run (или нажмите <F5>), чтобы создать хранимую процедуру.
Добавление тестовых записей
В отсутствие данных базы данных не особо интересны, поэтому удобно иметь сценарии, которые способны быстро загрузить тестовые записи в базу данных.
Записи таблицы Makes
Создайте новый запрос и выполните показанные далее операторы SQL для добавления записей в таблицу Makes:
USE [AutoLot]
GO
SET IDENTITY_INSERT [dbo].[Makes] ON
INSERT INTO [dbo].[Makes] ([Id], [Name]) VALUES (1, N'VW')
INSERT INTO [dbo].[Makes] ([Id], [Name]) VALUES (2, N'Ford')
INSERT INTO [dbo].[Makes] ([Id], [Name]) VALUES (3, N'Saab')
INSERT INTO [dbo].[Makes] ([Id], [Name]) VALUES (4, N'Yugo')
INSERT INTO [dbo].[Makes] ([Id], [Name]) VALUES (5, N'BMW')
INSERT INTO [dbo].[Makes] ([Id], [Name]) VALUES (6, N'Pinto')
SET IDENTITY_INSERT [dbo].[Makes] OFF
Записи таблицы Inventory
Чтобы добавить записи в таблицу Inventory, создайте новый запрос и выполните следующие операторы SQL:
USE [AutoLot]
GO
SET IDENTITY_INSERT [dbo].[Inventory] ON
GO
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (1, 1, N'Black', N'Zippy')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (2, 2, N'Rust', N'Rusty')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (3, 3, N'Black', N'Mel')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (4, 4, N'Yellow', N'Clunker')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (5, 5, N'Black', N'Bimmer')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (6, 5, N'Green', N'Hank')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (7, 5, N'Pink', N'Pinky')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (8, 6, N'Black', N'Pete')
INSERT INTO [dbo].[Inventory] ([Id], [MakeId], [Color], [PetName])
VALUES (9, 4, N'Brown',
N'Brownie')SET IDENTITY_INSERT [dbo].[Inventory] OFF
GO
Добавление тестовых записей в таблицу Customers
Чтобы добавить записи в таблицу Customers, создайте новый запрос и выполните представленные ниже операторы SQL:
USE [AutoLot]
GO
SET IDENTITY_INSERT [dbo].[Customers] ON
INSERT INTO [dbo].[Customers] ([Id], [FirstName], [LastName])
VALUES (1, N'Dave', N'Brenner')
INSERT INTO [dbo].[Customers] ([Id], [FirstName], [LastName])
VALUES (2, N'Matt', N'Walton')
INSERT INTO [dbo].[Customers] ([Id], [FirstName], [LastName])
VALUES (3,