私は次のように二つのテーブルと同様のデータベースを持っている:彼が望んでいるよう子にチェック制約を追加して、MySQLの親の値をチェックすることはできますか?
+----------------------+ +------------------------+
|Persons | |phones |
+----------------------+ +------------------------+
|id int +-----+ |id int |
|name varchar(100) | +---->+person_id int |
|allowed tinyint(1) | |number int |
+----------------------+ +------------------------+
一人は、多くの携帯電話を持つことができますが、彼は(> 0許可)、それを許可する必要があります。
だから、私は
CREATE TABLE `phones` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`persons_id` int(11) DEFAULT NULL,
`phonenumber` int(5) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `phones_ibfk_1` (`persons_id`),
CONSTRAINT `phones_ibfk_1` FOREIGN KEY (`persons_id`) REFERENCES `persons` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8`
を使用して、両方のテーブルを作成した。しかし、これは私が欲しいものをチェックしません。可能であれば私が知りたいことは、ALTER TABLE phones ADD CONSTRAINT chk_person CHECK (persons.allowed > 0)
のようなクエリを作ります。これは可能ですか?別の方法がありますか?
無意識の努力。 'allowed'が' 0'ならば、サーバサイドのコードでは単純に挿入を行いません。リレーショナルデータベースは**関係**を扱い、**権限**は扱いません。また、人が 'phones'に' n'レコードを持ち、 'allowed'を' 0'にすると、サーバサイドのコードは単に 'phones'の問い合わせを無視して何も表示しません。すべてのことを行うためにRDBMSを使用する必要はなく、誰かができることとできないことではなく、データを処理します。 – Mjh
@Mjh DBはデータの整合性を考慮します。 –
@ Golinmarqおそらく、その制限を処理するためのトリガーが必要です。 –