↓こんな感じで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;