設計図: メモ情報
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