設計図: メモ情報

DESIGN


■ TABLE 

Memo

チップス的な情報を格納するためのテーブルです。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
MemoID longkey PRIMARY - AUTO 主キー
SectionID shortkey FOREIGN OK   所属セクション
Public bit   - 0 公開
LastUpdate datetime   - GETDATE() 最終更新日(トリガによる自動更新)
AuthorID key FOREIGN -   著作者情報
Title nvarchar/32   -   メモの表題
Memo nvarchar/2000   -   メモの本文 (特殊な構文を予定中☆)
SystemID shortkey FOREIGN OK   関連プラットフォーム
PlatformID shortkey FOREIGN OK   関連プラットフォーム
VersionID key FOREIGN OK   関連プラットフォーム
Draft bit   -   未確認か

※ 関連プラットフォームが未指定の場合は、2つ以上に該当するもの、つまり不特定を意味します。

※ Draft フラグは、このメモがインターネット徘徊時などに未確認のまま収集されたことなどを示します。

 

外部キー

FIELD REFERENCE NOTE
AuthorID AuthorInformation.AuthorID  
SectionID MemoSection.SectionID  
SystemID PlatformInformation.SystemID  
PlatformID PlatformInformation.PlatformID  
VersionID PlatformInformation.VersionID  

 

トリガ

メモが追加・更新された場合に、自分自身および StationInformation の LastUpdate の日付を自動的に更新します。

CREATE TRIGGER [tr_Memo]
ON dbo.Memo
FOR INSERT, UPDATE
NOT FOR REPLICATION

AS

-- 特定のカラムでのみトリガ発動
IF UPDATE(Title) or UPDATE(Memo) or UPDATE(Draft)
BEGIN
-- 自分自身の最終更新日を変更
UPDATE Memo
SET LastUpdate = GETDATE()
WHERE MemoID IN (SELECT DISTINCT MemoID FROM INSERTED)

-- StationInformation の最終更新日を変更
UPDATE StationInformation
SET LastUpdate = GETDATE()
WHERE StationID IN (SELECT DISTINCT StationID FROM MemoSection WHERE SectionID IN (SELECT DISTINCT SectionID FROM INSERTED))
END
RETURN

 

MemoSection

メモのジャンルを格納するためのテーブルです。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
SectionID shortkey PRIMARY -   主キー
Active bit   - 0 セクションの有効状態
Name nvarchar/24   -   セクション名
StationID key FOREIGN -   所属ステーション
URLTop varchar/255   OK   セクションのトップ URL
URLDetail varchar/255   OK   セクションの詳細 URL (使用方法は未定)

 

外部キー

FIELD REFERENCE NOTE
StationID StationInformation.StationID  

 

トリガ

同一名称のものが登録されるのを阻止します。

CREATE TRIGGER [tr_MemoSectionCheck]
ON dbo.MemoSection
FOR INSERT, UPDATE
NOT FOR REPLICATION

AS

-- 名前が更新される場合のみを対象とする。
IF UPDATE([Name])
BEGIN
IF
(
SELECT COUNT(*) FROM MemoSection
WHERE [Name] IN (SELECT [Name] FROM INSERTED)
) > 1
BEGIN
RAISERROR('同一の Name が既に存在しています。', 16, 1)
ROLLBACK TRAN
END
END

RETURN

 

MemoShortGroup

小分類候補を格納するためのテーブルです。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
GroupID shortkey PRIMARY -   主キー
Name nvarchar/24   -   小分類名

 

トリガ

同一名称のものが登録されるのを阻止します。

CREATE TRIGGER [tr_MemoShortGroupCheck]
ON dbo.MemoShortGroup
FOR INSERT, UPDATE
NOT FOR REPLICATION

AS

-- 名前が更新される場合のみを対象とする。
IF UPDATE([Name])
BEGIN
IF
(
SELECT COUNT(*) FROM MemoShortGroup
WHERE [Name] IN (SELECT [Name] FROM INSERTED)
) > 1
BEGIN
RAISERROR('同一の Name が既に存在しています。', 16, 1)
ROLLBACK TRAN
END
END

RETURN

 

MemoUnitLanguages

メモがどのカテゴリ (プログラム言語) に所属しているかを記録するテーブルです。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
UnitID longkey PRIMARY - AUTO 主キー
MemoID longkey FOREIGN -   記録対象のメモ ID
LangGroupID key FOREIGN -   所属している言語 ID
CheckedVersion varchar/16   OK   バージョン情報

 

外部キー

FIELD REFERENCE NOTE
MemoID Memo.MemoID  
LangGroupID LanguageGroup.LangGroupID  

 

MemoUnitGroups

メモがどの小分類に所属しているかを記録するテーブルです。

 

テーブル設計

FIELD TYPE KEY NULL DEFAULT NOTE
UnitID longkey PRIMARY - AUTO 主キー
MemoID longkey FOREIGN -   記録対象のメモ ID
GroupID shortkey FOREIGN -   所属している小分類 ID
CheckedVersion varchar/16   OK   バージョン情報

 

外部キー

FIELD REFERENCE NOTE
MemoID Memo.MemoID  
GroupID MemoShortGroup.LangGroupID  

 

■ VIEW

ViewMemoIndex

非公開も含んだ、メモの一覧表示用ビューです。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
MemoID Memo    
SectionID Memo    
Public Memo    
LastUpdate Memo    
Title Memo    
GroupID MemoShortGroup    
GroupName MemoShortGroup Name  
CheckedGroupVersion MemoUnitGroups CheckedVersion  
LangGroupID LanguageGroup    
Language LanguageGroup    
CheckedLanguageVersion MemoUnitLanguages CheckedVersion  
SystemID Memo    
PlatformID Memo    
VersionID Memo    
Draft Memo    

 

実装

SELECT dbo.Memo.MemoID, dbo.Memo.SectionID, dbo.Memo.[Public],
dbo.Memo.LastUpdate, dbo.Memo.Title, dbo.MemoShortGroup.GroupID,
dbo.MemoShortGroup.Name AS GroupName,
dbo.MemoUnitGroups.CheckedVersion AS CheckedGroupVersion,
dbo.LanguageGroup.LangGroupID, dbo.LanguageGroup.Language,
dbo.MemoUnitLanguages.CheckedVersion AS CheckedLanguageVersion,
dbo.Memo.SystemID, dbo.Memo.PlatformID, dbo.Memo.VersionID,
dbo.Memo.Draft
FROM dbo.Memo LEFT OUTER JOIN
dbo.LanguageGroup INNER JOIN
dbo.MemoUnitLanguages ON
dbo.LanguageGroup.LangGroupID = dbo.MemoUnitLanguages.LangGroupID ON
dbo.Memo.MemoID = dbo.MemoUnitLanguages.MemoID LEFT OUTER JOIN
dbo.MemoShortGroup INNER JOIN
dbo.MemoUnitGroups ON
dbo.MemoShortGroup.GroupID = dbo.MemoUnitGroups.GroupID ON
dbo.Memo.MemoID = dbo.MemoUnitGroups.MemoID

 

ViewMemoDetail

メモの詳細表示用ビューです。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
MemoID Memo    
SectionID Memo    
Public Memo    
LastUpdate Memo    
AuthorID AuthorInformation AuthorID  
AuthorName AuthorInformation Name  
Title Memo    
Memo Memo    
SystemID Memo    
PlatformID Memo    
VersionID Memo    
Draft Memo    
PlatformName PlatformInformation    

 

実装

SELECT dbo.Memo.MemoID, dbo.Memo.SectionID, dbo.Memo.[Public],
dbo.Memo.LastUpdate, dbo.AuthorInformation.AuthorID,
dbo.AuthorInformation.Name AS AuthorName, dbo.Memo.Title, dbo.Memo.Memo,
dbo.Memo.SystemID, dbo.Memo.PlatformID, dbo.Memo.VersionID, dbo.Memo.Draft,
dbo.PlatformInformation.Name AS PlatformName
FROM dbo.Memo LEFT OUTER JOIN
dbo.PlatformInformation ON
dbo.Memo.SystemID = dbo.PlatformInformation.SystemID AND
dbo.Memo.PlatformID = dbo.PlatformInformation.PlatformID AND
dbo.Memo.VersionID = dbo.PlatformInformation.VersionID LEFT OUTER JOIN
dbo.AuthorInformation ON dbo.Memo.AuthorID = dbo.AuthorInformation.AuthorID

 

ViewMemoPublicIndex

公開用のみの、メモの一覧表示用ビューです。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
MemoID Memo    
SectionID Memo    
LastUpdate Memo    
Title Memo    
GroupID MemoShortGroup    
GroupName MemoShortGroup Name  
CheckedGroupVersion MemoUnitGroups CheckedVersion  
LangGroupID LanguageGroup    
Language LanguageGroup    
CheckedLanguageVersion MemoUnitLanguages CheckedVersion  
SystemID Memo    
PlatformID Memo    
VersionID Memo    
Draft Memo    

 

実装

SELECT MemoID, SectionID, LastUpdate, Title, GroupID, GroupName,
CheckedGroupVersion, LangGroupID, Language, CheckedLanguageVersion, SystemID,
PlatformID, VersionID, Draft
FROM dbo.ViewMemoIndex
WHERE ([Public] = 1)

 

ViewMemoPublicIndexWithStation

公開用のみの、メモの一覧表示用ビューです。所属するステーション情報も返します。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
MemoID ViewMemoPublicIndex    
SectionID ViewMemoPublicIndex    
StationID StationInformation    
StationName StationInformation Name  
StationURL StationInformation Homepage  
BasicColor StationInformation    
LastUpdate ViewMemoPublicIndex    
Title ViewMemoPublicIndex    
GroupID ViewMemoPublicIndex    
GroupName ViewMemoPublicIndex    
CheckedGroupVersion ViewMemoPublicIndex    
LangGroupID ViewMemoPublicIndex    
Language ViewMemoPublicIndex    
CheckedLanguageVersion ViewMemoPublicIndex    
SystemID ViewMemoPublicIndex    
PlatformID ViewMemoPublicIndex    
VersionID ViewMemoPublicIndex    
Draft ViewMemoPublicIndex    

 

実装

SELECT dbo.ViewMemoPublicIndex.MemoID, dbo.ViewMemoPublicIndex.SectionID,
dbo.StationInformation.StationID, dbo.StationInformation.Name AS StationName,
dbo.StationInformation.Homepage AS StationURL, dbo.StationInformation.BasicColor,
dbo.ViewMemoPublicIndex.LastUpdate, dbo.ViewMemoPublicIndex.Title,
dbo.ViewMemoPublicIndex.GroupID, dbo.ViewMemoPublicIndex.GroupName,
dbo.ViewMemoPublicIndex.CheckedGroupVersion,
dbo.ViewMemoPublicIndex.LangGroupID, dbo.ViewMemoPublicIndex.Language,
dbo.ViewMemoPublicIndex.CheckedLanguageVersion,
dbo.ViewMemoPublicIndex.SystemID, dbo.ViewMemoPublicIndex.PlatformID,
dbo.ViewMemoPublicIndex.VersionID, dbo.ViewMemoPublicIndex.Draft
FROM dbo.StationInformation RIGHT OUTER JOIN
dbo.MemoSection ON
dbo.StationInformation.StationID = dbo.MemoSection.StationID RIGHT OUTER JOIN
dbo.ViewMemoPublicIndex ON
dbo.MemoSection.SectionID = dbo.ViewMemoPublicIndex.SectionID

 

ViewMemoPublicDetail

公開データのみを対象とした、メモの詳細表示用ビューです。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
MemoID Memo    
SectionID Memo    
LastUpdate Memo    
AuthorID AuthorInformation AuthorID  
AuthorName AuthorInformation Name  
Title Memo    
Memo Memo    
SystemID Memo    
PlatformID Memo    
VersionID Memo    
Draft Memo    
PlatformName PlatformInformation    

 

実装

SELECT MemoID, SectionID, LastUpdate, AuthorID, AuthorName, Title, Memo, SystemID,
PlatformID, VersionID, Draft, PlatformName
FROM dbo.ViewMemoDetail
WHERE ([Public] = 1)

 

 

ViewMemoLanguageList

メモが使用している言語情報の一覧です。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
SectionID ViewMemoCountPerLanguage    
LangGroupID LanguageGroup    
Language LanguageGroup    
CompanyID LanguageGroup    
CompanyName CompanyInformation Name  
MemoCount ViewMemoCountPerLanguage メモの登録数
RegistDate LanguageGroup    
LastUpdate ViewMemoCountPerLanguage   メモの最終更新日

 

実装

SELECT dbo.ViewMemoCountPerLanguage.SectionID, dbo.LanguageGroup.LangGroupID,
dbo.LanguageGroup.Language, dbo.LanguageGroup.CompanyID,
dbo.CompanyInformation.Name AS CompanyName,
dbo.ViewMemoCountPerLanguage.MemoCount, dbo.LanguageGroup.RegistDate,
dbo.ViewMemoCountPerLanguage.LastUpdate
FROM dbo.LanguageGroup LEFT OUTER JOIN
dbo.CompanyInformation ON
dbo.LanguageGroup.CompanyID = dbo.CompanyInformation.CompanyID LEFT OUTER JOIN
dbo.ViewMemoCountPerLanguage ON
dbo.LanguageGroup.LangGroupID = dbo.ViewMemoCountPerLanguage.LangGroupID

 

ViewMemoShortGroupList

メモが使用している種別情報の一覧です。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
SectionID ViewMemoCountPerGroup    
GroupID MemoShortGroup    
GroupName MemoShortGroup Name  
MemoCount ViewMemoCountPerGroup メモの登録数
LastUpdate ViewMemoCountPerGroup   メモの最終更新日

 

実装

SELECT dbo.ViewMemoCountPerGroup.SectionID, dbo.MemoShortGroup.GroupID,
dbo.MemoShortGroup.Name AS GroupName,
dbo.ViewMemoCountPerGroup.MemoCount,
dbo.ViewMemoCountPerGroup.LastUpdate
FROM dbo.MemoShortGroup LEFT OUTER JOIN
dbo.ViewMemoCountPerGroup ON
dbo.MemoShortGroup.GroupID = dbo.ViewMemoCountPerGroup.GroupID

 

ViewMemoPlatformList

メモのプラットフォームごとの一覧です。VersionID はひとまとめにされます。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
SystemID PlatformInformation    
PlatformID PlatformInformation    
PlatformName PlatformInformation Name  
MemoCount ViewMemoCountPerPlatform    
LastUpdate ViewMemoCountPerPlatform   メモの最終更新日

 

実装

SELECT dbo.PlatformInformation.SystemID, dbo.PlatformInformation.PlatformID,
dbo.PlatformInformation.Name AS PlatformName,
dbo.ViewMemoCountPerPlatform.MemoCount,
dbo.ViewMemoCountPerPlatform.LastUpdate
FROM dbo.PlatformInformation LEFT OUTER JOIN
dbo.ViewMemoCountPerPlatform ON
dbo.PlatformInformation.SystemID = dbo.ViewMemoCountPerPlatform.SystemID AND
dbo.PlatformInformation.PlatformID = dbo.ViewMemoCountPerPlatform.PlatformID
WHERE (dbo.PlatformInformation.VersionID = 0)

 

ViewMemoSectionList

メモのセクションごとの一覧です。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
SectionID MemoSection    
SectionName MemoSection    
MemoCount ViewMemoCount   メモの登録数
StationID MemoSection    
StationName StationInformation Name  
Homepage StationInformation    
URLTop MemoSection    
URLDetail MemoSection    
LastUpdate ViewMemoCount   メモの最終更新日

 

実装

SELECT MemoSection.SectionID, MemoSection.Name AS SectionName,
ViewMemoCount.MemoCount, MemoSection.StationID,
StationInformation.Name AS StationName, StationInformation.Homepage,
MemoSection.URLTop, MemoSection.URLDetail, ViewMemoCount.LastUpdate
FROM dbo.MemoSection LEFT OUTER JOIN
dbo.StationInformation ON
dbo.MemoSection.StationID = dbo.StationInformation.StationID LEFT OUTER JOIN
dbo.ViewMemoCount ON
dbo.MemoSection.SectionID = dbo.ViewMemoCount.SectionID
WHERE (dbo.MemoSection.Active = 1)

 

ViewMemoUnitLanguages

所属グループの一覧表示用ビューです。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
UnitID MemoUnitGroups    
MemoID MemoUnitGroups    
LangGroupID LanguageGroup    
Language LanguageGroup    
CompanyID CompanyInformation    
CompanyName CompanyInformation Name  
CompanyURL CompanyInformation URL  
CheckedVersion ProgrammingMemoUnitGroups    

 

実装

SELECT dbo.MemoUnitLanguages.UnitID, dbo.MemoUnitLanguages.MemoID,
dbo.LanguageGroup.LangGroupID, dbo.LanguageGroup.Language,
dbo.CompanyInformation.CompanyID,
dbo.CompanyInformation.Name AS CompanyName,
dbo.CompanyInformation.URL AS CompanyURL,
dbo.MemoUnitLanguages.CheckedVersion
FROM dbo.CompanyInformation RIGHT OUTER JOIN
dbo.LanguageGroup ON
dbo.CompanyInformation.CompanyID = dbo.LanguageGroup.CompanyID RIGHT OUTER JOIN
dbo.MemoUnitLanguages ON
dbo.LanguageGroup.LangGroupID = dbo.MemoUnitLanguages.LangGroupID

 

ViewMemoCountPerLanguage

言語情報ごとの、公開中メモの登録数です。SectionID ごとに集計されます。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
LangGroupID LanguageGroup    
SectionID MemoSection    
MemoCount MemoUnitGroups COUNT(UnitID) メモの登録数
LastUpdate Memo MAX(LastUpdate) 言語ごとの最終更新日

 

実装

SELECT dbo.LanguageGroup.LangGroupID, dbo.Memo.SectionID,
COUNT(dbo.MemoUnitLanguages.UnitID) AS MemoCount,
MAX(dbo.Memo.LastUpdate) AS LastUpdate
FROM dbo.Memo RIGHT OUTER JOIN
dbo.MemoUnitLanguages ON
dbo.Memo.MemoID = dbo.MemoUnitLanguages.MemoID RIGHT OUTER JOIN
dbo.LanguageGroup ON
dbo.MemoUnitLanguages.LangGroupID = dbo.LanguageGroup.LangGroupID
WHERE (dbo.Memo.[Public] = 1)
GROUP BY dbo.LanguageGroup.LangGroupID, dbo.Memo.SectionID

 

ViewMemoCountPerGroup

グループ情報ごとの、公開中メモの登録数です。SectionID ごとに集計されます。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
GroupID MemoShortGroup    
SectionID MemoSection    
MemoCount MemoUnitGroups COUNT(UnitID) メモの登録数
LastUpdate Memo MAX(LastUpdate) グループごとの最終更新日

 

実装

SELECT dbo.MemoShortGroup.GroupID, dbo.Memo.SectionID,
COUNT(dbo.MemoUnitGroups.UnitID) AS MemoCount, MAX(dbo.Memo.LastUpdate)
AS LastUpdate
FROM dbo.Memo RIGHT OUTER JOIN
dbo.MemoUnitGroups ON
dbo.Memo.MemoID = dbo.MemoUnitGroups.MemoID RIGHT OUTER JOIN
dbo.MemoShortGroup ON
dbo.MemoUnitGroups.GroupID = dbo.MemoShortGroup.GroupID
WHERE (dbo.Memo.[Public] = 1)
GROUP BY dbo.MemoShortGroup.GroupID, dbo.Memo.SectionID

 

ViewMemoCount

セクションごとの、公開中メモの登録数です。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
SectionID Memo    
MemoCount Memo COUNT(MemoID) メモの登録数
LastUpdate Memo MAX(LastUpdate) メモの最終更新日

 

実装

SELECT SectionID, COUNT(MemoID) AS MemoCount, MAX(LastUpdate)
AS LastUpdate
FROM dbo.Memo
WHERE ([Public] = 1)
GROUP BY SectionID

 

ViewMemoCountPerPlatform

プラットフォーム情報ごとの、公開中メモの登録数です。SystemID と Platform ID  ごとに集計されます。

 

ビュー設計

FIELD ORG-TABLE ORG-FIELD NOTE
SystemID PlatformInformation    
PlatformID PlatformInformation    
MemoCount Memo COUNT(MemoID) メモの登録数
LastUpdate Memo MAX(LastUpdate) メモの最終更新日

 

実装

SELECT dbo.PlatformInformation.SystemID, dbo.PlatformInformation.PlatformID,
COUNT(dbo.Memo.MemoID) AS MemoCount, MAX(dbo.Memo.LastUpdate)
AS LastUpdate
FROM dbo.PlatformInformation INNER JOIN
dbo.Memo ON dbo.PlatformInformation.SystemID = dbo.Memo.SystemID AND
dbo.PlatformInformation.PlatformID = dbo.Memo.PlatformID AND
dbo.PlatformInformation.VersionID = dbo.Memo.VersionID
WHERE (dbo.Memo.[Public] = 1)
GROUP BY dbo.PlatformInformation.SystemID, dbo.PlatformInformation.PlatformID