Готовые работы / Практическая работа 6 (прикладная тема, оценка 1+)
.pdfСПО. ИКПИ-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