設計図: 履歴情報ヘッダー
DESIGN
■ TABLE
HistoryHeader
各ステーションごとの HTTP ヘッダログです。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE HistoryID longkey PRIMARY - AUTO 主キー RecordTime datetime - GETDATE() 履歴登録日 StationID key FOREIGN OK 対象となるステーション ID RemoteAddr IPv4 OK クライアント IP AgentID longkey FOREIGN OK ユーザーエージェント
外部キー
FIELD REFERENCE NOTE AgentID HistoryHeaderAgent.AgentID StationID StationInformation.StationID
HistoryHeaderRelay
各 HistoryHeader ごとの以降のログです。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE HistoryID longkey PRIMARY - 主キー / 履歴 ID RelayID key PRIMARY - 主キー RegistDate datetime - GETDATE() 記録日時 TargetPath varchar/256 OK 要求 URL Referer varchar/256 OK リンク元 URL QueryString varchar/128 OK 引数 RequestMethod varchar/16 OK 要求メソッド
外部キー
FIELD REFERENCE NOTE HistoryID HistoryHeader.ID
HistoryHeaderAgent
HTTP ヘッダから取得した UserAgent の履歴です。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE AgentID longkey PRIMARY - 主キー Name varchar/128 - ユーザーエージェント Note nvarchar/200 OK 備考欄 URL varchar/256 OK 関連 URL AccessCount int - 1 アクセス数 UpdateTime datetime - GETDATE() 更新日
■ VIEW
ViewHistoryHerderListing
履歴の一覧表示用ビューです。HistoryHeaderRelay テーブルも参照し、そのなかの RelayID = 1 のものを採用します。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE HistoryID HistoryHeader RecordTime HistoryHeader StationID StationInformation StationName StationInformation Name StationURL StationInformation Homepage BasicColor StationInformation RemoteAddr HistoryHeader AgentID HistoryHeaderAgent AgentName HistoryHeaderAgent Name AgentURL HistoryHeaderAgent URL TargetPath HistoryHeaderRelay Referer HistoryHeaderRelay QueryString HistoryHeaderRelay RequestMethod HistoryHeaderRelay
実装
SELECT dbo.HistoryHeader.HistoryID, dbo.HistoryHeader.RecordTime,
dbo.StationInformation.StationID, dbo.StationInformation.Name,
dbo.StationInformation.Homepage, dbo.StationInformation.BasicColor,
dbo.HistoryHeader.RemoteAddr, dbo.HistoryHeaderAgent.AgentID,
dbo.HistoryHeaderAgent.Name AS AgentName, dbo.HistoryHeaderAgent.URL,
dbo.HistoryHeaderRelay.TargetPath, dbo.HistoryHeaderRelay.Referer,
dbo.HistoryHeaderRelay.QueryString,
dbo.HistoryHeaderRelay.RequestMethod
FROM dbo.HistoryHeader LEFT OUTER JOIN
dbo.StationInformation ON
dbo.HistoryHeader.StationID = dbo.StationInformation.StationID LEFT OUTER JOIN
dbo.HistoryHeaderAgent ON
dbo.HistoryHeader.AgentID = dbo.HistoryHeaderAgent.AgentID LEFT OUTER JOIN
dbo.HistoryHeaderRelay ON
dbo.HistoryHeader.HistoryID = dbo.HistoryHeaderRelay.HistoryID AND
dbo.HistoryHeaderRelay.RelayID = 1
■ STORED PROCEDURE
sp_HistoryHeaderRegist
ヘッダログを記録します。
引数
PARAM TYPE DEFAULT NOTE @StationID key 対象のステーション @RemoteAddr IPv4 NULL 要求元クライアント @Agent varchar/128 NULL 要求元エージェント
戻り値
PARAM TYPE NOTE HistoryID longkey 記録された履歴 ID
実装
CREATE PROCEDURE [sp_HistoryHeaderRegist]
@StationID [key],
@RemoteAddr IPv4 = NULL,
@Agent VARCHAR(128) = NULL
AS
SET NOCOUNT ON
DECLARE @AgentID [longkey]
-- AgentID の決定処理
SELECT @AgentID = AgentID FROM [HistoryHeaderAgent] WHERE [Name] = @Agent
IF @AgentID IS NULL
BEGIN
INSERT INTO [HistoryHeaderAgent] ([Name]) VALUES (@Agent)
SET @AgentID = @@IDENTITY
END
ELSE
BEGIN
UPDATE [HistoryHeaderAgent] SET [AccessCount] = [AccessCount] + 1, [UpdateTime] = GETDATE()
WHERE [AgentID] = @AgentID
END
-- Header ログの記録
INSERT INTO [HistoryHeader]
(
[StationID], [RemoteAddr], [AgentID]
)
VALUES
(
@StationID, @RemoteAddr, @AgentID
)
SELECT @@IDENTITY AS [HistoryID]sp_HistoryHeaderRelayRegist
ヘッダログの追尾を記録します。
引数
PARAM TYPE DEFAULT NOTE @HistoryID longkey 元の履歴 ID @RelayID key 0 追尾 ID @TargetPath varchar/256 NULL 要求 URL @Referer varchar/256 NULL リンク元 @QueryString varchar/128 NULL 引数 @RequestMethod varchar/16 NULL メソッド
戻り値
PARAM TYPE NOTE RelayID key 登録した ID
実装
CREATE PROCEDURE [sp_HistoryHeaderRelayRegist]
@HistoryID [longkey],
@RelayID [key] = 0,
@TargetPath VARCHAR(256) = NULL,
@Referer VARCHAR(256) = NULL,
@QueryString VARCHAR(128) = NULL,
@RequestMethod VARCHAR(16) = NULL
AS
SET NOCOUNT ON
-- HistoryID が適切な場合のみ追記
IF @HistoryID > 0
BEGIN
INSERT INTO [HistoryHeaderRelay]
(
[HistoryID], [RelayID], [TargetPath], [Referer], [QueryString], [RequestMethod]
)
VALUES
(
@HistoryID, @RelayID, @TargetPath, @Referer, @QueryString, @RequestMethod
)
SET @RelayID = @RelayID + 1
END
SELECT @RelayID AS [RelayID]