# DROP DATABASE IF EXISTS news;

# CREATE DATABASE news;
# GRANT ALL ON news.* TO 'sota'@'localhost' IDENTIFIED BY 'copernicus';

# USE news;
# CREATE TABLE `RSS_log`(`rss_id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `date` DATETIME NOT NULL, `offset` TIME NOT NULL, `source` VARCHAR(32));

# CREATE TABLE `subjects`(`s_id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `subject` VARCHAR(32) NOT NULL) ENGINE=InnoDB;
# CREATE TABLE `articles`(`a_id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `url` VARCHAR(512), `date` DATETIME NOT NULL,
#  `offset` TIME NOT NULL, `s_id` INT UNSIGNED NOT NULL, `title` VARCHAR(128) NOT NULL, `body` BLOB NOT NULL,
#  INDEX KEY_ID(`s_id`), FOREIGN KEY (`s_id`) REFERENCES `subjects`(s_id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;


DROP DATABASE IF EXISTS accounts;
CREATE DATABASE accounts;
GRANT ALL ON accounts.* TO 'accounts'@'localhost' IDENTIFIED BY 'copernicus';

USE accounts;

# 支出の大項目を格納するテーブル
# catID: ユニークな通し番号
# catName: カテゴリ名
# description: 説明
# outgoing: -1)支出 or 1)収入,
# valid: 1)有効, 0)無効（使用しない項目に設定） 
CREATE TABLE `category` (
	`catID` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`catName` VARCHAR(50) NOT NULL,
	`description` VARCHAR(100),
	`outgoing` TINYINT NOT NULL,
	`valid` TINYINT NOT NULL,
	INDEX KEY_ID(`catID`)
) ENGINE=InnoDB;

# 支出の大項目を格納するテーブル
# subcatID: ユニークな通し番号
# subcatName: カテゴリ名
# description: 説明
# invalid: 1)有効, 0)無効（今は使わない） 
CREATE TABLE `subcategory` (
	`subcatID` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`subcatName` VARCHAR(50) NOT NULL,
	`catID` INT UNSIGNED NOT NULL,
	`description` VARCHAR(100),
	`valid` TINYINT NOT NULL,
	INDEX(`catID`),
	FOREIGN KEY (`catID`) REFERENCES `category`(`catID`)
) ENGINE=InnoDB;

CREATE TABLE `payFrom` (
	`payerID` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`payerName` VARCHAR(40) NOT NULL,
	`valid` TINYINT NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `bankAccount` (
	`accountID` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`accountName` VARCHAR(40) NOT NULL,
	`valid` TINYINT NOT NULL
) ENGINE=InnoDB;

CREATE TABLE `transaction` (
	`tsaID` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`date` DATE NOT NULL,
	`amount` INT NOT NULL,
	`payFrom` INT UNSIGNED NOT NULL,
	`catID` INT UNSIGNED NOT NULL,
	`subcatID` INT UNSIGNED,
	`note` VARCHAR(50),
	`registDate` DATETIME NOT NULL,
	`outputDate` DATETIME,
	INDEX(`catID`),
	INDEX(`subcatID`),
	INDEX(`outputDate`),
	FOREIGN KEY (`catID`) REFERENCES `category`(`catID`),
	FOREIGN KEY (`subcatID`) REFERENCES `subcategory`(`subcatID`) ,
	FOREIGN KEY (`payFrom`) REFERENCES `payFrom`(`payerID`)
) ENGINE=InnoDB;

CREATE TABLE `transfer` (
	`tsfID` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`date` DATE NOT NULL,
	`amount` INT NOT NULL,
	`payFrom` INT UNSIGNED NOT NULL,
	`accountID` INT UNSIGNED NOT NULL,
	`note` VARCHAR(50),
	`registDate` DATETIME NOT NULL,
	`outputDate` DATETIME,
	INDEX(`payFrom`),
	INDEX(`registDate`),
	INDEX(`outputDate`),
	FOREIGN KEY (`payFrom`) REFERENCES `payFrom`(`payerID`),
	FOREIGN KEY (`accountID`) REFERENCES `bankAccount`(`accountID`)
) ENGINE=InnoDB;

FLUSH PRIVILEGES;
