私はこのデータベース構造を持っています、
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `announces` (
`tracker` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`failCount` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`tracker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `hashes` (
`hash` binary(20) NOT NULL,
`indexed` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `trackers` (
`hash` binary(20) NOT NULL,
`tracker` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`seeders` mediumint(8) unsigned NOT NULL DEFAULT '0',
`leechers` mediumint(8) unsigned NOT NULL DEFAULT '0',
KEY `hashFK` (`hash`),
KEY `trackerFK` (`tracker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `trackers`
ADD CONSTRAINT `hashFK` FOREIGN KEY (`hash`) REFERENCES `hashes` (`hash`)
ON DELETE CASCADE,
ADD CONSTRAINT `trackerFK` FOREIGN KEY (`tracker`) REFERENCES `announces` (`tracker`)
ON DELETE CASCADE;
テーブルトラッカーには、トラッカー用とハッシュ用の2つの外部キーがあります。
これにより、最初にハッシュを使用せずにハッシュをトラッカーに含めることができないようになります。また、ハッシュがハッシュから削除されると、トラッカーからも削除されます。
トラッカーの場合と同様に、トラッカーは、トラッカーに存在する前にアナウンスに存在する必要があり、アナウンスから削除されると、トラッカーからも削除されます。
indexed
私が抱えている問題は、hashes
行の対応する値がである場合にのみ、ハッシュがトラッカーに存在する必要があることです== 1
。これは可能ですか?