設計図: ダウンロード履歴

DESIGN


■ TABLE

HistoryDownloads

ダウンロードログを記録します。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
DownloadID longkey PRIMARY - AUTO 主キー
StationID key FOREIGN OK   対象となるステーション ID
LastUpdate datetime   - GETDATE() 最終ダウンロード日
PathName varchar/255   OK   ファイルのパス名
FileName varchar/64   -   ファイル名
TypeName varchar/16   -   ファイルの拡張子
Downloads int   - 1 ダウンロードされた数

 

外部キー

FIELD REFERENCE NOTE
StationID StationInformation.StationID  

 

HistoryDownloadsLog

ダウンロードログのうち、個別の情報を記録します。FileID が有効のときの場合のみの記録用です。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
LogID longkey PRIMARY - AUTO 主キー
RegistDate datetime   - GETDATE() 登録日
RemoteAddress IPv4   -   要求したホストの IP
FileID key FOREIGN -   ダウンロードしたファイル

 

外部キー

FIELD REFERENCE NOTE
FileID HistoryDownloadsFileInformation  

 

HistoryDownloadsFileInformation

ダウンロードファイルの内容を記録するファイルです(半必須)。まだ作っていませんが、対応プラットフォームは別テーブルにて記録する予定です。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
FileID key PRIMARY - AUTO 主キー
LastUpdate datetime   - GETDATE() 最終登録日
PathName varchar/255   OK   ファイルのパス名
FileName varchar/64   -   ファイル名
TypeName varchar/16   -   ファイルの拡張子
ApplicationName nvarchar/32   -   アプリケーション名
Version varchar/16   -   バージョン番号
Note nvarchar/200   OK   コメント
URL varchar/255   OK   関連 URL
FileSize int   -   ファイルの大きさ

 

■ VIEW

ViewHistoryDownloadsList

更新履歴の一覧表示用ビューです。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
DownloadID HistoryDownloads    
Identifier HistoryDownloads    
LastUpdate HistoryDownloads    
PathName HistoryDownloads    
FileName HistoryDownloads    
TypeName HistoryDownloads    
Downloads HistoryDownloads    
FileID HistoryDownloadsFileInformation    
ApplicationName HistoryDownloadsFileInformation    
Version HistoryDownloadsFileInformation    
Note HistoryDownloadsFileInformation    
URL HistoryDownloadsFileInformation
FileSize HistoryDownloadsFileInformation    
ArchiveDate HistoryDownloadsFileInformation LastUpdate  

 

実装

SELECT dbo.HistoryDownloads.DownloadID, dbo.HistoryDownloads.Identifier, 
dbo.HistoryDownloads.LastUpdate, dbo.HistoryDownloads.PathName, 
dbo.HistoryDownloads.FileName, dbo.HistoryDownloads.TypeName, 
dbo.HistoryDownloads.Downloads, dbo.HistoryDownloadsFileInformation.FileID, 
dbo.HistoryDownloadsFileInformation.ApplicationName, 
dbo.HistoryDownloadsFileInformation.Version, 
dbo.HistoryDownloadsFileInformation.Note, 
dbo.HistoryDownloadsFileInformation.URL,
dbo.HistoryDownloadsFileInformation.FileSize
dbo.HistoryDownloadsFileInformation.LastUpdate As ArchiveDate
FROM dbo.HistoryDownloads LEFT OUTER JOIN
dbo.HistoryDownloadsFileInformation ON 
dbo.HistoryDownloads.TypeName = dbo.HistoryDownloadsFileInformation.TypeName AND
dbo.HistoryDownloads.FileName = dbo.HistoryDownloadsFileInformation.FileName AND
dbo.HistoryDownloads.PathName = dbo.HistoryDownloadsFileInformation.PathName

 

■ STORED PROCEDURE

sp_HistoryDownloadsRegist

ダウンロード履歴を登録します。

 

引数

Procedure;1
PARAM TYPE DEFAULT NOTE
@PathName varchar/255   記録対象のパス
@FileName varchar/64   記録対象のファイル名
@TypeName varchar/16   記録対象の種類
@RemoteAddress IPv4 NULL 要求したホストのアドレス
@Identifier varchar/16 NULL ステーションを示す識別文字列
Procedure;2
PARAM TYPE DEFAULT NOTE
@PathName varchar/255   記録対象のパス
@FileName varchar/64   記録対象のファイル名
@TypeName varchar/16   記録対象の種類
@Identifier varchar/16   ステーションを示す識別文字列
Procedure;3
PARAM TYPE DEFAULT NOTE
@PathName varchar/255   記録対象のパス
@FileName varchar/64   記録対象のファイル名
@TypeName varchar/16   記録対象の種類
@RemoteAddress IPv4   要求したホストのアドレス

 

 

戻り値

Procedure;1 / Procedure;2 / Procedure;3
PARAM TYPE NOTE

 

実装

CREATE PROCEDURE [sp_HistoryDownloadsRegist];1

@PathName VARCHAR(255),
@FileName VARCHAR(64),
@TypeName VARCHAR(16),
@RemoteAddress [IPv4] = NULL,
@Identifier VARCHAR(16) = NULL

AS
SET NOCOUNT ON

EXEC sp_HistoryDownloadsRegist;2 @PathName, @FileName, @TypeName, @Identifier
EXEC sp_HistoryDownloadsRegist;3 @PathName, @FileName, @TypeName, @RemoteAddress

RETURN




CREATE PROCEDURE [sp_HistoryDownloadsRegist];2

@PathName VARCHAR(255),
@FileName VARCHAR(64),
@TypeName VARCHAR(16),
@Identifier VARCHAR(16) = NULL

AS
SET NOCOUNT ON


IF EXISTS
(
SELECT * FROM [HistoryDownloads]
WHERE [Identifier] = @Identifier
AND [PathName] = @PathName
AND [FileName] = @FileName
AND [TypeName] = @TypeName
)
UPDATE [HistoryDownloads] SET
[LastUpdate] = GETDATE(),
[Downloads] = [Downloads] + 1
WHERE [Identifier] = @Identifier
AND [PathName] = @PathName
AND [FileName] = @FileName
AND [TypeName] = @TypeName
ELSE
INSERT [HistoryDownloads]
(
[Identifier],
[PathName],
[FileName],
[TypeName]
)
VALUES
(
@Identifier,
@PathName,
@FileName,
@TypeName
)

RETURN



CREATE PROCEDURE [sp_HistoryDownloadsRegist];3

@PathName VARCHAR(255),
@FileName VARCHAR(64),
@TypeName VARCHAR(16),
@RemoteAddress [IPv4]

AS

IF @RemoteAddress IS NOT NULL
BEGIN
DECLARE @FileID [key]

SELECT @FileID = [FileID] FROM [HistoryDownloadsFileInformation]
WHERE [PathName] = @PathName
AND [FileName] = @FileName
AND [TypeName] = @TypeName


IF @FileID IS NOT NULL
INSERT [HistoryDownloadsLog] ([RemoteAddress], [FileID])
VALUES(@RemoteAddress, @FileID)
END

RETURN