我有這樣的數據庫結構,用mysql的外鍵有可能有一個基於列值的外鍵?
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
。這可能嗎?
你想設置索引= 1到只要跟蹤器插入朝向它FK哈希?或者,也許您希望每當使用fk將跟蹤器插入到索引爲!= 1的哈希中時引發錯誤? – Sebas
最好後者,據我瞭解手冊,我不認爲我可以添加外鍵的觸發器?謝謝 – Griff