設計図: FFXI 情報

DESIGN


■ 概要

FINAL FANTASY XI 関連の設計です。

 

定義データ型  
基本情報 FFXI_Attribute / FFXI_Effect / FFXI_Country / FFXI_Region / FFXI_Area
ViewFFXI_Area / ViewFFXI_AreaAll
魔法関連 FFXI_MagicClass / FFXI_MagicSkill / FFXI_Magic
ViewFFXI_MagicList
武器関連 FFXI_WeaponClass / FFXI_WeaponBase / FFXI_WeaponKind / FFXI_Weapon
ショップ関連 FFXI_Shop / FFXI_ShopItem / FFXI_ShopSpecialtyIndex
ViewFFXI_ShopList / ViewFFXI_ShopItemCount / ViewFFXI_ShopListWithCount / ViewFFXI_ShopItemList
合成関連 FFXI_SynthesisRank / FFXI_SynthesisKind / FFXI_Synthesis / FFXI_SynthesisCompoundSkill / FFXI_SynthesisMaterial
 

 

定義データ型

名前 用途 データ型 サイズ 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