end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

IT資産(ハードウェアやソフトウェア)を管理するDB table構成を考える - CMDB

↓こんな感じでOKかと思います

CREATE DATABASE it_assets CHARACTER SET utf8;
grant all privileges on it_assets.* to ないしょ@'%' identified by 'ないしょ';

CREATE TABLE data_center_doc (
id                      int AUTO_INCREMENT,
doc_name                varchar(100) not null unique comment 'DC文書名 or サービス名',
location                varchar(30)    comment '設置場所. 西日本, AWS',
data_center_doc_url     varchar(200)    comment 'DC文書の保管先url',
note                    varchar(300)    comment '概要',
dc_usage_price          int             comment 'DC利用料 円/月',
primary key(id)
)
COMMENT='データセンタA文書の単位で記載';

CREATE TABLE service (
dc_doc_name             varchar(100)   comment 'tbl:data_center_docのname',
id                      int AUTO_INCREMENT,
service_name            varchar(100) not null unique comment 'サービス名',
note                    varchar(300)    comment '概要',
monitor_sys_url         varchar(200)    comment '例:xymon画面のurl',
service_start_date      date            coment 'サービス開始日',
sla_price               int             comment '運用費 円/月',
sla_start_date          date            comment '運用契約 開始日',
sla_doc                 varchar(200)    comment '運用契約書の保管先url',
owner_dept              varchar(50)     comment 'オーナ部署',
owner_man               varchar(50)     comment 'オーナ部署 責任者、担当者',
our_sales_dept          varchar(50)     comment '自社 営業 部署',
our_sales_man           varchar(50)     comment '自社 営業 責任者、担当者',
our_dev_dept            varchar(50)     comment '自社 開発 部署',
our_dev_man             varchar(50)     comment '自社 開発 責任者、担当者',
our_ops_dept            varchar(50)     comment '自社 運用 部署',
our_ops_man             varchar(50)     comment '自社 運用 責任者、担当者',
primary key(id)
)
COMMENT='運用契約の単位で記載';

ALTER TABLE service ADD CONSTRAINT service_dc_doc_name
FOREIGN KEY (dc_doc_name) REFERENCES data_center_doc (doc_name)
ON DELETE SET NULL ON UPDATE CASCADE;


CREATE TABLE service_option (
dc_doc_name             varchar(100)   comment 'tbl:data_center_docのname',
id                      int AUTO_INCREMENT,
type                    varchar(10)     comment 'ssl, dns, other',
name                    varchar(100) not null comment '名称',
note                    varchar(300)    comment '概要',
running_price           int             comment 'ランニング費 円/月',
vender                  varchar(50)     comment 'ベンダー',
start_date              date            comment '開始日',
nend_date               date            comment '終了日',
primary key(id)
)
COMMENT='dnsやssl証明書 等. dnsやsslの有効期限はscriptで自動checkしたい';

ALTER TABLE service_option ADD CONSTRAINT service_option_dc_doc_name
FOREIGN KEY (dc_doc_name) REFERENCES data_center_doc (doc_name)
ON DELETE SET NULL ON UPDATE CASCADE;


CREATE TABLE hardware (
dc_doc_name             varchar(100)   comment 'tbl:data_center_docのname',
id                      int AUTO_INCREMENT,
hw_type                 varchar(10)  not null comment 'オンプレ 統合WIN 統合DB AWS ',
hw_name                 varchar(100) not null comment '名称',
maker                   varchar(50),
model                   varchar(80)     comment '型番',
quantity                int default 1   comment '数量. 冗長化の場合、2以上',
note                    varchar(300)    comment '概要',
support_vender          varchar(50)     comment '保守業者',
support_start_date      date            comment '保守 開始日',
support_end_date        date            comment '保守 終了日',
extra_support_end_date  date            comment '特別 終了日',
support_end_note        varchar(300)    comment 'EOLのアナウンス有無等',
primary key(id)
)
COMMENT='サーバやロードバランサ、外付けドライブ 等';

ALTER TABLE hardware ADD CONSTRAINT hardware_dc_doc_name
FOREIGN KEY (dc_doc_name) REFERENCES data_center_doc (doc_name)
ON DELETE SET NULL ON UPDATE CASCADE;

-- 外部参照keyを貼られる側には、indexが必要みたい
create index hardware_hw_name on hardware(hw_name);


CREATE TABLE software (
dc_doc_name             varchar(100) comment 'tbl:data_center_docのname',
hw_name                 varchar(100) comment 'tbl:hardwareのhw_name',
id                      int AUTO_INCREMENT,
sw_type                 varchar(10)  not null comment 'OS MW AP OTHER',
sw_name                 varchar(100) not null,
maker                   varchar(50),
model                   varchar(200)     comment '型番 ex. uname -a. perl -v',
quantity                int default 1   comment 'ライセンス数',
note                    varchar(300)    comment '概要',
support_vender          varchar(50)     comment '保守業者',
support_start_date      date            comment '保守 開始日',
support_end_date        date            comment '保守 終了日',
extra_support_end_date  date            comment '特別 終了日',
support_end_note        varchar(300)    comment 'EOLのアナウンス有無等',
primary key(id)
)
COMMENT='OSやミドルウェア 等. 各swのversionはxymon経由で自動収集したい';

ALTER TABLE software ADD CONSTRAINT software_dc_doc_name
FOREIGN KEY (dc_doc_name) REFERENCES data_center_doc (doc_name)
ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE software ADD CONSTRAINT software_hw_name
FOREIGN KEY (hw_name) REFERENCES hardware (hw_name)
ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE software ADD CONSTRAINT software_hw_name
FOREIGN KEY (hw_name) REFERENCES hardware (hw_name)
ON DELETE SET NULL ON UPDATE CASCADE;