設計図: FFXI 情報
DESIGN
■ 概要
FINAL FANTASY XI 関連の設計です。
■ 定義データ型
名前 用途 データ型 サイズ NULL ルール ディフォルト ffxi_name_item アイテム名 char 18 OK - - ffxi_name_noun お店の名前など varchar 32 OK - - ffxi_name_npc NPC 名 varchar 16 OK - - ffxi_skill スキル値 smallint 2 OK - -
■ 基本情報
TABLE
FFXI_Country
国名を登録するためのテーブルです。
設計
FIELD TYPE KEY NULL DEFAULT NOTE CountryID shortkey PRIMARY - 主キー CountryName ffxi_name_noun UNIQUE -
FFXI_Region
リージョン名を登録するためのテーブルです。リージョン区分には各国も含まれ、国に関しては FFXI_Country と同一の ID を持つようにします。
設計
FIELD TYPE KEY NULL DEFAULT NOTE RegionID shortkey PRIMARY - 主キー RegionName ffxi_name_noun UNIQUE -
FFXI_Area
エリア名を登録するためのテーブルです。AreaID = 0 のものは、そのリージョン自身をさすレコードとして扱います。
AreaLabel の部分は、FFXI のゲーム内にて、最大文字数と思われる調度のサイズを採用してみました。それ以外はてきとうな見積もりです。
設計
FIELD TYPE KEY NULL DEFAULT NOTE RegionID shortkey PRIMARY/FOREIGN - 所属リージョン AreaID shortkey PRIMARY - 主キー AreaName ffxi_name_noun UNIQUE - AreaName_English ffxi_name_noun UNIQUE OK AreaLabel char/10 UNIQUE OK 省略名 外部キー
FIELD REFERENCE NOTE RegionID FFXI_Region 所属リージョン
FFXI_Attribute
FINAL FANTASY XI の属性(魔法属性)を整理するためのテーブルです。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE AttrID key PRIMARY - 主キー AttrName nchar/8 - 種別名
FFXI_Effect
FINAL FANTASY XI の属性(連携属性)を整理するためのテーブルです。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE EffectID key PRIMARY - 主キー EffectName nchar/8 - 種別名 EffectLevel tinyint OK 連携レベル VIEW
ViewFFXI_AreaAll
エリア一覧を表示させるためのビューです。リージョン自身を意味する AreaID = 0 も含みます。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE RegionID FFXI_Area AreaID FFXI_Area RegionName FFXI_Region AreaName FFXI_Area AreaName_English FFXI_Area AreaLabel FFXI_Area 実装
SELECT dbo.FFXI_Area.RegionID, dbo.FFXI_Area.AreaID, dbo.FFXI_Region.RegionName,
dbo.FFXI_Area.AreaName, dbo.FFXI_Area.AreaName_English,
dbo.FFXI_Area.AreaLabel
FROM dbo.FFXI_Area LEFT OUTER JOIN
dbo.FFXI_Region ON dbo.FFXI_Area.RegionID = dbo.FFXI_Region.RegionID
ViewFFXI_Area
エリア一覧を表示させるためのビューです。リージョン自身を意味する AreaID = 0 は除外します。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE RegionID ViewFFXI_AreaAll AreaID ViewFFXI_AreaAll RegionName ViewFFXI_AreaAll AreaName ViewFFXI_AreaAll AreaName_English ViewFFXI_AreaAll AreaLabel ViewFFXI_AreaAll 実装
SELECT RegionID, AreaID, RegionName, AreaName, AreaName_English, AreaLabel
FROM dbo.ViewFFXI_AreaAll
WHERE (AreaID <> 0)
■ ショップ関連
内容
どこにどんなアイテムが売っているかを記録するものです。値段については参考値段ながら、調べた時点での値段を登録するようにします。
テーブル
FFXI_Shop
お店の所在や更新日時などの基本情報です。
設計
FIELD TYPE KEY NULL DEFAULT NOTE ShopID key PRIMARY - 主キー RegionID shortkey FOREIGN/UNIQUE - 所属リージョン AreaID shortkey FOREIGN/UNIQUE - 所属エリア / 特産品は AreaID = 0 を利用 ShopName ffxi_name_noun UNIQUE - お店の識別名 ShopAddress char/8 - OK 特産品店の場合は NULL NPCName ffxi_name_npc UNIQUE OK お店の NPC 名 / 特産品店の場合は NULL LastUpdate datetime - - GETDATE() 最終更新日 Note nvarchar/100 - OK 外部キー
FIELD REFERENCE NOTE RegionID FFXI_Region 所属リージョン AreaID FFXI_Area 所属エリア
FFXI_ShopItem
お店が取り扱っているアイテム名とその値段です。これを追加、更新した際には、FFXI_Shop の LastUpdate が更新されるようにします。
設計
FIELD TYPE KEY NULL DEFAULT NOTE ItemID longkey PRIMARY - AUTO 主キー ShopID key FOREIGN/UNIQUE - 取扱店 ID ItemName ffxi_name_item UNIQUE - 取り扱いアイテム名 ItemPrice int - - 確認時の値段 ItemRank tinyint - OK コンクェスト順位、NULL の場合は未確認、128 はギルド商品 SaleCq1 bool - OK コンクェスト1位で販売 SaleCq2 bool - OK コンクェスト2位で販売 SaleCq3 bool - OK コンクェスト3位で販売 SaleGuild bool - OK ギルドで販売、コンクェスト順位は無効 外部キー
FIELD REFERENCE NOTE ShopID FFXI_Shop 関連お店情報 トリガ設計
修正や追加、削除がなされた際に、FFXI_Shop の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_ShopItem]
ON dbo.[FFXI_ShopItem]
FOR INSERT, UPDATE, DELETE
NOT FOR REPLICATION
AS
-- FFXI_Shop の最終更新日を更新します
UPDATE [FFXI_Shop] SET [LastUpdate] = GETDATE()
WHERE [ShopID] IN
(
SELECT [ShopID] FROM INSERTED
UNION SELECT [ShopID] FROM DELETED
)
RETURN
FFXI_ShopSpecialtyIndex
特産品店の配置を記録するためのテーブルです。
設計
FIELD TYPE KEY NULL DEFAULT NOTE IndexID key PRIMARY - AUTO ShopID key FOREIGN - 特産品店のお店 ID RegionID shortkey FOREIGN - AreaID shortkey FOREIGN - ShopAddress char/8 - OK 出店位置 ShopNPCName ffxi_name_npc - OK 出店 NPC 名 外部キー
FIELD REFERENCE NOTE ShopID FFXI_Shop RegionID FFXI_Area 所属リージョン AreaID FFXI_Area 所属エリア
ビュー
ViewFFXI_ShopList
FINAL FANTASY XI のお店一覧用ビューです。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE ShopID FFXI_Shop RegionID FFXI_Shop AreaID FFXI_Shop RegionName FFXI_Region AreaName FFXI_Area ShopName FFXI_Shop ShopAddress FFXI_Shop NPCName FFXI_Shop LastUpdate FFXI_Shop Note FFXI_Shop 実装
SELECT dbo.FFXI_Shop.ShopID, dbo.FFXI_Shop.RegionID, dbo.FFXI_Shop.AreaID,
dbo.FFXI_Region.RegionName, dbo.FFXI_Area.AreaName, dbo.FFXI_Shop.ShopName,
dbo.FFXI_Shop.ShopAddress, dbo.FFXI_Shop.NPCName, dbo.FFXI_Shop.LastUpdate,
dbo.FFXI_Shop.Note
FROM dbo.FFXI_Region INNER JOIN
dbo.FFXI_Area ON
dbo.FFXI_Region.RegionID = dbo.FFXI_Area.RegionID RIGHT OUTER JOIN
dbo.FFXI_Shop ON dbo.FFXI_Area.RegionID = dbo.FFXI_Shop.RegionID AND
dbo.FFXI_Area.AreaID = dbo.FFXI_Shop.AreaID
ViewFFXI_ShopItemCount
FINAL FANTASY XI のお店取り扱いアイテム数を集計します。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE ShopID FFXI_ShopItem ItemCount FFXI_ShopItem COUNT(ItemID) 実装
CREATE VIEW dbo.ViewFFXI_ShopListWithCount
AS
SELECT ShopID, COUNT(ItemID) AS ItemCount
FROM dbo.FFXI_ShopItem
GROUP BY ShopID
ViewFFXI_ShopListWithCount
FINAL FANTASY XI のお店一覧用ビューです。取り扱いアイテム数も含みます。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE * ViewFFXI_ShopList ItemCount FFXI_ShopItem 実装
SELECT ShopList.*, ItemCount.ItemCount
FROM dbo.ViewFFXI_ShopList ShopList LEFT OUTER JOIN
dbo.ViewFFXI_ShopItemCount ItemCount ON ShopList.ShopID = ItemCount.ShopID
ViewFFXI_ShopSpecialtyIndex
FINAL FANTASY XI の特産品インデックス表示用ビューです。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE IndexID FFXI_ShopSpecialtyIndex ShopID FFXI_Shop ShopName FFXI_Shop RegionID FFXI_Area AreaID FFXI_Area RegionName FFXI_Area AreaName FFXI_Area ShopName FFXI_Shop ShopAddress FFXI_ShopSpecialtyIndex ShopNPCName FFXI_ShopSpecialtyIndex ShopRegionID FFXI_Shop RegionID 取り扱っている特産リージョン 実装
SELECT FFXI_INDEX.IndexID, dbo.FFXI_Shop.ShopName, dbo.FFXI_Shop.ShopID,
FFXI_AREA.RegionID, FFXI_AREA.AreaID, FFXI_AREA.RegionName,
FFXI_AREA.AreaName, FFXI_INDEX.ShopAddress, FFXI_INDEX.ShopNPCName,
dbo.FFXI_Shop.RegionID AS ShopRegionID
FROM dbo.FFXI_ShopSpecialtyIndex FFXI_INDEX LEFT OUTER JOIN
dbo.FFXI_Shop ON FFXI_INDEX.ShopID = dbo.FFXI_Shop.ShopID LEFT OUTER JOIN
dbo.ViewFFXI_Area FFXI_AREA ON FFXI_INDEX.RegionID = FFXI_AREA.RegionID AND
FFXI_INDEX.AreaID = FFXI_AREA.AreaID
ViewFFXI_ShopItemList
FINAL FANTASY XI のお店が取り扱っているアイテムを検索するのに利用するビューです。
FIELD ORG-TABLE ORG-FIELD NOTE ItemID FFXI_ShopItem ItemName FFXI_ShopItem ItemPrice FFXI_ShopItem ItemRank FFXI_ShopItem ShopID FFXI_Shop ShopName FFXI_Shop RegionID ViewFFXI_AreaAll AreaID ViewFFXI_AreaAll RegionName ViewFFXI_AreaAll AreaName ViewFFXI_AreaAll LastUpdate FFXI_Shop 実装
SELECT dbo.FFXI_ShopItem.ItemID, dbo.FFXI_ShopItem.ItemName,
dbo.FFXI_ShopItem.ItemPrice, dbo.FFXI_ShopItem.ItemRank, dbo.FFXI_Shop.ShopID,
dbo.FFXI_Shop.ShopName, dbo.ViewFFXI_AreaAll.RegionID,
dbo.ViewFFXI_AreaAll.AreaID, dbo.ViewFFXI_AreaAll.RegionName,
dbo.ViewFFXI_AreaAll.AreaName, dbo.FFXI_Shop.LastUpdate
FROM dbo.FFXI_ShopItem LEFT OUTER JOIN
dbo.FFXI_Shop ON
dbo.FFXI_ShopItem.ShopID = dbo.FFXI_Shop.ShopID LEFT OUTER JOIN
dbo.ViewFFXI_AreaAll ON
dbo.ViewFFXI_AreaAll.RegionID = dbo.FFXI_Shop.RegionID AND
dbo.ViewFFXI_AreaAll.AreaID = dbo.FFXI_Shop.AreaID
■ 魔法関連
内容
魔法データを扱うためのものです。とりあえず作成したもののもう少し設計を見直す予定です。
魔法名を ffxi_name_item 型にするとともに、FFXI_Magic テーブルのキャスト時間関連をもっと大まかに、Next (リキャスト) の値および、ヘイストありとなしでの /wait 差、つまりはおおよその再詠唱短縮時間のみを記録するようにする予定です。
テーブル
FFXI_MagicClass
FINAL FANTASY XI の魔法データを整理するためのテーブルです。魔法の種類わけをするためのデータを格納しています。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE ClassID key PRIMARY - 主キー ClassName nchar/8 - 種別名
FFXI_MagicSkill
FINAL FANTASY XI の魔法データを整理するためのテーブルです。魔法のスキルわけをするためのデータを格納しています。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE SkillID key PRIMARY - 主キー SkillName nchar/8 - 種別名
FFXI_Magic
FINAL FANTASY XI の魔法データを整理するためのテーブルです。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE MagicID longkey PRIMARY - AUTO 主キー Name nvarchar/16 - 魔法名 ClassID key FOREIGN OK 魔法の種類 SkillID key FOREIGN OK 魔法スキル AttrID key FOREIGN OK 属性 LastUpdate datetime - GETDATE() 最終更新日 MPCost smallint OK 消費 MP Cast smallint OK 詠唱時間 Recast smallint OK 再使用間隔 LvWHM smallint OK 使用可能レベル / NULL は未確認および使用不可の両方の意味 LvBLM smallint OK LvRDM smallint OK LvPLD smallint OK LvDRK smallint OK LvBRD smallint OK LvNIN smallint OK LvSHM smallint OK Note nvarchar/128 OK 魔法の性能やメモ CastFast smallint OK 詠唱時間 (ファストキャスト時) RecastHaste smallint OK 再使用間隔 (ヘイスト時) 外部キー
FIELD REFERENCE NOTE ClassID FFXI_MagicClass.ClassID 魔法の種類 SkillID FFXI_MagicSkill.SkillID 魔法のスキル AttrID FFXI_Attribute.AttrID 属性 トリガ設計
自分自身の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_Magic]
ON dbo.[FFXI_Magic]
FOR UPDATE
NOT FOR REPLICATION
AS
-- 自分自身の最終更新日を更新します
IF NOT UPDATE([LastUpdate])
BEGIN
UPDATE [FFXI_Magic] SET [LastUpdate] = GETDATE()
WHERE [FFXI_Magic].[MagicID] IN (SELECT [MagicID] FROM INSERTED)
END
RETURN追加挿入時に既に同じ名前がないかを調べます。
CREATE TRIGGER [tr_FFXI_Magic_CheckSameName]
ON dbo.[FFXI_Magic]
FOR INSERT, UPDATE
NOT FOR REPLICATION
AS
-- 同一の名前が存在していないかを調べます
IF UPDATE([Name])
BEGIN
IF EXISTS
(
SELECT [FFXI].[MagicID] FROM [FFXI_Magic] AS [FFXI] LEFT JOIN INSERTED
ON [FFXI].[Name] = INSERTED.[Name]
WHERE [FFXI].[MagicID] <> INSERTED.[MagicID]
)
BEGIN
-- 異なる ID で同一名が見つかった場合にはエラー
RAISERROR('既に同じ Name を持つデータが存在しています。', 15, 1)
ROLLBACK TRAN
END
END
RETURNビュー
ViewFFXI_MagicList
FINAL FANTASY XI の魔法一覧表示用ビューです。
ビュー設計
FIELD ORG-TABLE ORG-FIELD NOTE MagicID FFXI_Magic ClassID FFXI_MagicClass SkillID FFXI_MagicSkill AttrID FFXI_Attribute Name FFXI_Magic ClassName FFXI_MagicClass SkillName FFXI_MagicSkill AttrName FFXI_Attribute LastUpdate FFXI_Magic MPCost FFXI_Magic 再詠唱時間 [Next] Cast FFXI_Magic Recast FFXI_Magic LvWHM FFXI_Magic LvBLM FFXI_Magic LvRDM FFXI_Magic LvPLD FFXI_Magic LvDRK FFXI_Magic LvBRD FFXI_Magic LvNIN FFXI_Magic LvSHM FFXI_Magic Note FFXI_Magic CastFast FFXI_Magic ファストキャスト時の詠唱時間 RecastHaste FFXI_Magic ヘイスト時の再使用時間 実装
SELECT FFXI_Magic.MagicID, FFXI_MagicClass.ClassID, FFXI_MagicSkill.SkillID,
FFXI_Attribute.AttrID, FFXI_Magic.Name, FFXI_MagicClass.ClassName,
FFXI_MagicSkill.SkillName, FFXI_Attribute.AttrName, FFXI_Magic.LastUpdate,
FFXI_Magic.MPCost, FFXI_Magic.Cast, FFXI_Magic.Recast, FFXI_Magic.LvWHM,
FFXI_Magic.LvBLM, FFXI_Magic.LvRDM, FFXI_Magic.LvPLD, FFXI_Magic.LvDRK,
FFXI_Magic.LvBRD, FFXI_Magic.LvNIN, FFXI_Magic.LvSHM, FFXI_Magic.Note,
FFXI_Magic.CastFast, FFXI_Magic.RecastHaste
FROM dbo.FFXI_Magic INNER JOIN
dbo.FFXI_MagicClass ON
dbo.FFXI_Magic.ClassID = dbo.FFXI_MagicClass.ClassID INNER JOIN
dbo.FFXI_MagicSkill ON
dbo.FFXI_Magic.SkillID = dbo.FFXI_MagicSkill.SkillID INNER JOIN
dbo.FFXI_Attribute ON dbo.FFXI_Magic.AttrID = dbo.FFXI_Attribute.AttrID
■ 武器関連
内容
武器データを扱うためのものです。とりあえず作成したもののもう少し設計を見直す予定です。
テーブル
FFXI_WeaponClass
FINAL FANTASY XI の武器データを整理するためのテーブルです。武器情報のうち、武器の種類わけ (競売リスト準拠) をするための情報を格納します。
設計
FIELD TYPE KEY NULL DEFAULT NOTE ClassID key PRIMARY - 主キー ClassName nchar/16 - 種別名
FFXI_WeaponBase
FINAL FANTASY XI の武器データを整理するためのテーブルです。武器情報のうち、基本的なグループわけをするための情報を格納します。
設計
FIELD TYPE KEY NULL DEFAULT NOTE BaseID key PRIMARY - 主キー BaseName nchar/16 - 識別名 ClassID key FOREIGN - 武器の種別 ID LastUpdate datetime - GETDATE() 最終更新日 Note nvarchar/200 OK メモ EquipWAR bool - 0 装備フラグ:戦士 EquipMNK bool - 0 装備フラグ:モンク EquipRDM bool - 0 装備フラグ:赤魔道士 EquipTHF bool - 0 装備フラグ:シーフ EquipWHM bool - 0 装備フラグ:白魔道士 EquipBLM bool - 0 装備フラグ:黒魔道士 EquipPLD bool - 0 装備フラグ:ナイト EquipBRD bool - 0 装備フラグ:吟遊詩人 EquipDRK bool - 0 装備フラグ:暗黒騎士 EquipBST bool - 0 装備フラグ:獣使い EquipRNG bool - 0 装備フラグ:狩人 EquipSAM bool - 0 装備フラグ:侍 EquipNIN bool - 0 装備フラグ:忍者 EquipDRG bool - 0 装備フラグ:竜騎士 EquipSHM bool - 0 装備フラグ:召喚士 外部キー
FIELD REFERENCE NOTE ClassID FFXI_WeaponClass.ClassID トリガ
自分自身の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_WeaponBase]
ON dbo.[FFXI_WeaponBase]
FOR UPDATE
NOT FOR REPLICATION
AS
-- 自分自身の最終更新日を更新します
IF NOT UPDATE([LastUpdate])
BEGIN
UPDATE [FFXI_WeaponBase] SET [LastUpdate] = GETDATE()
WHERE [FFXI_WeaponBase].[BaseID] IN (SELECT [BaseID] FROM INSERTED)
END
RETURN追加挿入時に既に同じ名前がないかを調べます。
CREATE TRIGGER [tr_FFXI_WeaponBase_CheckSameName]
ON dbo.[FFXI_WeaponBase]
FOR INSERT, UPDATE
NOT FOR REPLICATION
AS
-- 同一の名前が存在していないかを調べます
IF UPDATE([BaseName])
BEGIN
IF EXISTS
(
SELECT [FFXI].[BaseID] FROM [FFXI_WeaponBase] AS [FFXI] LEFT JOIN INSERTED
ON [FFXI].[BaseName] = INSERTED.[BaseName]
WHERE [FFXI].[BaseID] <> INSERTED.[BaseID]
)
BEGIN
-- 異なる ID で同一名が見つかった場合にはエラー
RAISERROR('既に同じ BaseName を持つデータが存在しています。', 15, 1)
ROLLBACK TRAN
END
END
RETURN
FFXI_WeaponKind
FINAL FANTASY XI の武器データを整理するためのテーブルです。武器情報のうち、性能的なグループわけをするための情報を格納します。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE BaseID key PRIMARY/FOREIGN - 主キー KindID key PRIMARY - 主キー KindName nchar/16 - 種別識別子 LastUpdate datetime - GETDATE() 最終更新日 Note nvarchar/200 OK メモ Interval smallint - 武器の間隔 ProbHit smallint - 0 命中率修正 ProbAvoid smallint - 0 回避率修正 外部キー
FIELD REFERENCE NOTE BaseID FFXI_WeaponBase.BaseID トリガ
自分自身の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_WeaponKind]
ON dbo.[FFXI_WeaponKind]
FOR UPDATE
NOT FOR REPLICATION
AS
-- 自分自身の最終更新日を更新します
IF NOT UPDATE([LastUpdate])
BEGIN
DECLARE @BaseID [key]
DECLARE @KindID [key]
DECLARE cursor_update CURSOR FOR
SELECT [BaseID], [KindID] FROM INSERTED
OPEN cursor_update
FETCH NEXT FROM cursor_update INTO @BaseID, @KindID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE [FFXI_WeaponKind] SET [LastUpdate] = GETDATE()
WHERE [BaseID] = @BaseID AND [KindID] = @KindID
FETCH NEXT FROM cursor_update INTO @BaseID, @KindID
END
CLOSE cursor_update
DEALLOCATE cursor_update
END
RETURN追加挿入時に既に同じ名前がないかを調べます。
CREATE TRIGGER [tr_FFXI_WeaponKind_CheckSameName]
ON dbo.[FFXI_WeaponKind]
FOR INSERT, UPDATE
NOT FOR REPLICATION
AS
-- 同一の名前が存在していないかを調べます
IF UPDATE([KindName])
BEGIN
IF EXISTS
(
SELECT [FFXI].[KindID] FROM [FFXI_WeaponKind] AS [FFXI] LEFT JOIN INSERTED
ON [FFXI].[KindName] = INSERTED.[KindName]
WHERE [FFXI].[BaseID] <> INSERTED.[BaseID] OR [FFXI].[KindID] <> INSERTED.[KindID]
)
BEGIN
-- 異なる ID で同一名が見つかった場合にはエラー
RAISERROR('既に同じ KindName を持つデータが存在しています。', 15, 1)
ROLLBACK TRAN
END
END
RETURN
FFXI_Weapon
FINAL FANTASY XI の武器データを整理するためのテーブルです。武器情報のうち、個々の装備品を格納します。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE WeaponID longkey PRIMARY - AUTO 主キー Name nvarchar/24 - 装備品名 BaseID key FOREIGN - 武器の種別 ID KindID key FOREIGN - LastUpdate datetime - GETDATE() 最終更新日 Note nvarchar/200 OK メモ Level smallint - 装備可能レベル Damage smallint - D 値 AttrID key FOREIGN - 0 (物理) 属性 Effect nvarchar/24 OK 追加効果(属性以外) STR smallint - 0 STR 修正 DEX smallint - 0 DEX 修正 VIT smallint - 0 VIT 修正 AGI smallint - 0 AGI 修正 INT smallint - 0 INT 修正 MND smallint - 0 MND 修正 CHR smallint - 0 CHR 修正 RegistFire smallint - 0 耐火 RegistIce smallint - 0 耐氷 RegistAir smallint - 0 耐風 RegistEarth smallint - 0 耐土 RegistThunder smallint - 0 耐雷 RegistWater smallint - 0 耐水 RegistLight smallint - 0 耐光 RegistDark smallint - 0 耐闇 外部キー
FIELD REFERENCE NOTE AttrID FFXI_Attribute.AttrID 属性 BaseID FFXI_WeaponKind.BaseID KindID FFXI_WeaponKind.KindID トリガ
自分自身の最終更新日を更新します。また、このデータは比較的大きな更新となるため、ステーションの最終更新日も書き換えます。
CREATE TRIGGER [tr_FFXI_Weapon_CheckSameName]
ON dbo.[FFXI_Weapon]
FOR INSERT, UPDATE
NOT FOR REPLICATION
AS
-- 同一の名前が存在していないかを調べます
IF UPDATE([Name])
BEGIN
IF EXISTS
(
SELECT [FFXI].[WeaponID] FROM [FFXI_Weapon] AS [FFXI] LEFT JOIN INSERTED
ON [FFXI].[Name] = INSERTED.[Name]
WHERE [FFXI].[WeaponID] <> INSERTED.[WeaponID]
)
BEGIN
-- 異なる ID で同一名が見つかった場合にはエラー
RAISERROR('既に同じ Name を持つデータが存在しています。', 15, 1)
ROLLBACK TRAN
END
END
RETURN
■ 合成関連
内容
合成レシピを取り扱うためのものです。
テーブル
FFXI_SynthesisRank
FINAL FANTASY XI の合成ランクとその称号の一覧を記録するテーブルです。
設計
FIELD TYPE KEY NULL DEFAULT NOTE RankID shortkey PRIMARY - AUTO 主キー RankName ffxi_name_item - - 称号 SkillCap ffxi_skill - - このランクのスキルキャップ
FFXI_SynthesisKind
FINAL FANTASY XI の合成の種類を記録するテーブルです。
設計
FIELD TYPE KEY NULL DEFAULT NOTE KindID shortkey PRIMARY - AUTO 主キー KindName ffxi_name_item - 合成の種類名
FFXI_Synthesis
FINAL FANTASY XI の合成レシピを記録する目次となるテーブルです。素材を除く基本情報を記録します。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE SynthesisID key PRIMARY - 主キー KindID shortkey FOREIGN OK 合成の種類 ItemName ffxi_name_item - 得られるアイテム名 SkillCap ffxi_skill OK スキル上限値 AttributeID key FOREIGN OK 使用クリスタルの属性 NumberOfItem tinyint OK 得られるアイテム数 LastUpdate datetime - GETDATE() 最終更新日 外部キー
FIELD REFERENCE NOTE KindID FFXI_SynthesisKind.KindID AttributeID FFXI_Attibute.AttrID トリガ
自分自身の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_Synthesis]
ON dbo.[FFXI_Synthesis]
FOR UPDATE
NOT FOR REPLICATION
AS
-- 自分自身の最終更新日を更新します
IF NOT UPDATE([LastUpdate])
BEGIN
DECLARE @SynthesisID [key]
DECLARE cursor_update CURSOR FOR
SELECT DISTINCT [SynthesisID] FROM INSERTED
OPEN cursor_update
FETCH NEXT FROM cursor_update INTO @SynthesisID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE [FFXI_Synthesis] SET [LastUpdate] = GETDATE()
WHERE [SynthesisID] = @SynthesisID
FETCH NEXT FROM cursor_update INTO @SynthesisID
END
CLOSE cursor_update
DEALLOCATE cursor_update
END
RETURN
FFXI_SynthesisCompoundSkill
FINAL FANTASY XI の合成レシピにて、複合スキルが必要な場合はそれをここに記録します。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE CompoundID longkey PRIMARY - AUTO 主キー SynthesisID key FOREIGN - 対象となる合成 ID KindID shortkey FOREIGN - 複合スキルの種類 SkillCap ffxi_skill OK 複合スキル上限値 外部キー
FIELD REFERENCE NOTE SynthesisID FFXI_Synthesis.SynthesisID KindID FFXI_SynthesisKind.KindID トリガ
自分自身が対象としている FFXI_Synthesis の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_SynthesisCompoundSkill]
ON dbo.[FFXI_SynthesisCompoundSkill]
FOR INSERT, UPDATE
NOT FOR REPLICATION
AS
-- 自分自身の所属する FFXI_Synthesis の最終更新日を更新します
DECLARE @SynthesisID [key]
DECLARE cursor_update CURSOR FOR
SELECT DISTINCT [SynthesisID] FROM INSERTED
OPEN cursor_update
FETCH NEXT FROM cursor_update INTO @SynthesisID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE [FFXI_Synthesis] SET [LastUpdate] = GETDATE()
WHERE [SynthesisID] = @SynthesisID
FETCH NEXT FROM cursor_update INTO @SynthesisID
END
CLOSE cursor_update
DEALLOCATE cursor_update
RETURN
FFXI_SynthesisMaterial
FINAL FANTASY XI の合成レシピにて、合成に必要な素材をここへ記録します。
テーブル設計
FIELD TYPE KEY NULL DEFAULT NOTE MaterialID longkey PRIMARY - AUTO 主キー SynthesisID key FOREIGN - 対象となる合成 ID ItemName ffxi_name_item - 使用する素材 NumberOfItem smallint - 使用する素材の数 外部キー
FIELD REFERENCE NOTE SynthesisID FFXI_Synthesis.SynthesisID トリガ
自分自身が対象としている FFXI_Synthesis の最終更新日を更新します。
CREATE TRIGGER [tr_FFXI_SynthesisMaterial]
ON dbo.[FFXI_SynthesisMaterial]
FOR INSERT, UPDATE
NOT FOR REPLICATION
AS
-- 自分自身の所属する FFXI_Synthesis の最終更新日を更新します
DECLARE @SynthesisID [key]
DECLARE cursor_update CURSOR FOR
SELECT DISTINCT [SynthesisID] FROM INSERTED
OPEN cursor_update
FETCH NEXT FROM cursor_update INTO @SynthesisID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE [FFXI_Synthesis] SET [LastUpdate] = GETDATE()
WHERE [SynthesisID] = @SynthesisID
FETCH NEXT FROM cursor_update INTO @SynthesisID
END
CLOSE cursor_update
DEALLOCATE cursor_update
RETURN