設計図: ダウンロード履歴
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