Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые работы / Практическая работа 6 (прикладная тема, оценка 1+)

.pdf
Скачиваний:
22
Добавлен:
06.04.2022
Размер:
204.42 Кб
Скачать

СПО. ИКПИ-84. Коваленко Леонид Александрович

ПРАКТИЧЕСКАЯ РАБОТА №6

Сервис для аукционов с повышением цены (английский аукцион),

победителем которого признается лицо, предложившее наивысшую цену.

В базе данных должна храниться информация об аукционах, лотах,

участниках аукционных торгов. Обновление записей по стоимости каждого лота должно происходить в реальном времени.

Первоначальный вид неверно спроектированной базы данных представлен на рис. 1.

Рисунок 1

Поля «current_price» и «bidder_id» обновляются по запросам участников торгов («Bidder»). Если участников торгов много, то частые обновления могут приводить к увеличению числа блокировок соответствующих записей таблицы «Lot».

Для исправления такой ситуации рекомендуется следующая схема базы данных (рис. 2).

Рисунок 2

1.Auction — таблица аукционов;

2.Lot — таблица лотов;

3.Bidder — таблица участников аукциона;

4.Step — таблица шагов аукционных торгов;

5.Bid — таблица ставок;

6.Win — таблица победителей аукциона.

Акцент смещается на добавление шагов («Step») вместо обновления

записей таблицы «Lot».

Структуры таблиц приведены в табл. 1-6.

Таблица 1. Таблица аукционов («Auction»)

Атрибут

Описание

id

Идентификатор аукциона

name

Наименование аукциона

place

Место проведения аукциона

date

Дата и время проведения аукциона

Таблица 2. Таблица лотов («Lot»)

 

Атрибут

Описание

id

Идентификатор лота

name

Наименование лота

start_price

Стартовая цена лота

auction_id

Идентификатор аукциона

date

Дата и время начала продажи лота

 

2

Таблица 3. Таблица участников аукциона («Bidder»)

Атрибут

Описание

id

Идентификатор участника

name

Наименование участника

place

Место нахождения участника

lot_id

Идентификатор лота

Таблица 4. Таблица шагов аукционных торгов («Step»)

Атрибут

Описание

id

Идентификатор шага

lot_id

Идентификатор лота

lot_price

Цена лота

date

Дата и время шага

Таблица 5. Таблица ставок («Bid»)

 

Атрибут

Описание

id

Идентификатор ставки

step_id

Идентификатор шага

bidder_id

Идентификатор участника

Таблица 6. Таблица победителей аукциона («Win»)

Атрибут

Описание

lot_id

Идентификатор лота

win_price

Цена завершения аукциона

win_id

Идентификатор участника-

победителя

 

3

Таблица 7. Скрипт генерации таблиц (MS SQL Server 2016) generate_script.sql

USE [AuctionDB]

 

GO

 

/****** Object: Table [dbo].[Auction]

Script Date: 06.04.2022 12:07:08 ******/

SET ANSI_NULLS ON

 

GO

 

SET QUOTED_IDENTIFIER ON

 

GO

 

CREATE TABLE [dbo].[Auction](

 

[id] [bigint] IDENTITY(1,1) NOT NULL, [name] [varchar](100) NOT NULL, [place] [varchar](200) NOT NULL, [date] [datetime] NOT NULL,

CONSTRAINT [PK_Auction] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

 

GO

 

/****** Object: Table [dbo].[Bid]

Script Date: 06.04.2022 12:07:08 ******/

SET ANSI_NULLS ON

 

GO

 

SET QUOTED_IDENTIFIER ON

 

GO

 

CREATE TABLE [dbo].[Bid](

 

[id] [bigint] IDENTITY(1,1) NOT NULL, [step_id] [bigint] NOT NULL, [bidder_id] [bigint] NULL,

CONSTRAINT [PK_Bid] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

 

GO

 

/****** Object: Table [dbo].[Bidder]

Script Date: 06.04.2022 12:07:08 ******/

SET ANSI_NULLS ON

 

GO

 

SET QUOTED_IDENTIFIER ON

 

GO

 

CREATE TABLE [dbo].[Bidder](

 

[id] [bigint] IDENTITY(1,1) NOT NULL, [name] [varchar](100) NOT NULL, [place] [varchar](200) NOT NULL, [lot_id] [bigint] NOT NULL,

CONSTRAINT [PK_Bidder] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

 

GO

 

/****** Object: Table [dbo].[Lot]

Script Date: 06.04.2022 12:07:08 ******/

SET ANSI_NULLS ON

 

GO

 

SET QUOTED_IDENTIFIER ON

 

GO

CREATE TABLE [dbo].[Lot](

[id] [bigint] IDENTITY(1,1) NOT NULL, [name] [varchar](100) NOT NULL, [start_price] [money] NOT NULL, [auction_id] [bigint] NOT NULL, [date] [datetime] NULL,

CONSTRAINT [PK_Lot] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] GO

/****** Object: Table [dbo].[Step] Script Date: 06.04.2022 12:07:08 ******/

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

4

CREATE TABLE [dbo].[Step](

[id] [bigint] IDENTITY(1,1) NOT NULL, [lot_id] [bigint] NOT NULL, [lot_price] [money] NOT NULL,

[date] [datetime] NULL, CONSTRAINT [PK_Step] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

 

/****** Object: Table [dbo].[Win]

Script Date: 06.04.2022 12:07:08 ******/

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

CREATE TABLE [dbo].[Win](

[lot_id] [bigint] NOT NULL, [win_price] [bigint] NOT NULL, [win_id] [bigint] NULL, [date] [datetime] NOT NULL,

CONSTRAINT [PK_Win] PRIMARY KEY CLUSTERED

(

[lot_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] GO

ALTER TABLE [dbo].[Auction] ADD CONSTRAINT [DF_Auction_date] DEFAULT (getdate()) FOR [date]

GO

 

 

ALTER TABLE [dbo].[Lot] ADD

CONSTRAINT [DF_Lot_date]

DEFAULT (getdate()) FOR [date]

GO

 

 

ALTER TABLE [dbo].[Step] ADD

CONSTRAINT [DF_Step_date]

DEFAULT (getdate()) FOR [date]

GO

 

 

ALTER TABLE [dbo].[Win] ADD

CONSTRAINT [DF_Win_date]

DEFAULT (getdate()) FOR [date]

GO

ALTER TABLE [dbo].[Bid] WITH CHECK ADD CONSTRAINT [FK_Bid_Bidder] FOREIGN KEY([bidder_id]) REFERENCES [dbo].[Bidder] ([id])

ON UPDATE SET NULL

ON DELETE SET NULL GO

ALTER TABLE [dbo].[Bid] CHECK CONSTRAINT [FK_Bid_Bidder] GO

ALTER TABLE [dbo].[Bid] WITH CHECK ADD CONSTRAINT [FK_Bid_Step] FOREIGN KEY([step_id]) REFERENCES [dbo].[Step] ([id])

ON UPDATE CASCADE

ON DELETE CASCADE GO

ALTER TABLE [dbo].[Bid] CHECK CONSTRAINT [FK_Bid_Step] GO

ALTER TABLE [dbo].[Bidder] WITH CHECK ADD CONSTRAINT [FK_Bidder_Lot] FOREIGN KEY([lot_id]) REFERENCES [dbo].[Lot] ([id])

GO

ALTER TABLE [dbo].[Bidder] CHECK CONSTRAINT [FK_Bidder_Lot] GO

ALTER TABLE [dbo].[Lot] WITH CHECK ADD CONSTRAINT [FK_Lot_Auction] FOREIGN KEY([auction_id]) REFERENCES [dbo].[Auction] ([id])

ON UPDATE CASCADE

ON DELETE CASCADE GO

ALTER TABLE [dbo].[Lot] CHECK CONSTRAINT [FK_Lot_Auction] GO

ALTER TABLE [dbo].[Step] WITH CHECK ADD CONSTRAINT [FK_Step_Lot] FOREIGN KEY([lot_id]) REFERENCES [dbo].[Lot] ([id])

ON UPDATE CASCADE

ON DELETE CASCADE GO

ALTER TABLE [dbo].[Step] CHECK CONSTRAINT [FK_Step_Lot] GO

ALTER TABLE [dbo].[Win] WITH CHECK ADD CONSTRAINT [FK_Win_Bidder_Last] FOREIGN KEY([win_id]) REFERENCES [dbo].[Bidder] ([id])

ON UPDATE SET NULL

ON DELETE SET NULL GO

ALTER TABLE [dbo].[Win] CHECK CONSTRAINT [FK_Win_Bidder_Last] GO

ALTER TABLE [dbo].[Win] WITH CHECK ADD CONSTRAINT [FK_Win_Lot] FOREIGN KEY([lot_id]) REFERENCES [dbo].[Lot] ([id])

5

ON UPDATE CASCADE

ON DELETE CASCADE GO

ALTER TABLE [dbo].[Win] CHECK CONSTRAINT [FK_Win_Lot] GO

6