 
        
        Готовые работы / Практическая работа 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
