0

イベントに参加するカテゴリを持つシステムがあります。これらのカテゴリはすべて単純で、ID と名前があります。私が心配していることの 1 つは、これらのカテゴリを作成しているときに、id が常に同じままで、静的でなければならないことです。1 つを削除すると、たとえば id=1 の「政治」としましょう。これらのイベントはすべて孤立したカテゴリになります。私が考えた解決策の 1 つは、それらに文字列 ID を割り当てることです。そのため、それらが削除されたとしても、それほど問題にはなりません。どのようなソリューションをお勧めしますか?

私の観点からは、IDを保持し、レコードの削除を許可せず、編集のみを許可する制約を置くことができるようです。もう 1 つは、文字列 ID を使用することですが、ID がめちゃくちゃになることを心配する問題は解決するようですが、これは面倒に思えます。

4

1 に答える 1

0

はい、これが外部キー制約の目的です。また、削除の処理方法に関するルールも許可します。たとえば、削除を依存レコードにカスケードすることを許可しますが、これはもちろん非常に危険であり、この状況では望ましくありません。単純な基本的な制約で十分です。

でも!!!!これは、mysql について理解しておくべき重要なことです。デフォルトの mysql エンジン (myisam) は、外部キー制約をまったくサポートしていません。それらをサポートするエンジンを使用する必要があります。最も一般的なのは innodb です。

DDL を生成するときに制約を指定すると、myisam テーブルは制約を受け入れますが、無視するだけなので、制約を追加する前に、関連するすべてのテーブルが innodb テーブルになるように設定/変更されていることを確認してください。

どのように制約を追加しますか?

ALTER TABLE `event` ADD CONSTRAINT `category_event` 
FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`);

この例では、リンクを作成するために、イベント テーブルに外部キー category_id があると想定しています。この制約を追加した後、カテゴリ テーブルから行を削除しようとして、既存のイベント行にそのキーが含まれている場合、mysql は DELETE を許可せず、エラーを返します。これについては、http: //dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.htmlで詳しく説明しています。

于 2013-08-14T21:36:50.210 に答える