補助テーブルを作成してプロパティ名の参照を保持することができます。次に、そのテーブルを、ユーザーIDとプロパティの1つのIDの間のマージテーブル—とリンクさせることができます。そうすることで、いつでもプロパティを変更できます。
外部キーの使用“カスケード削除”もう存在しないプロパティを持つユーザーの詳細。さらに、有効なプロパティ名への参照のみを追加し、インデックスを使用して検索を最適化することができます。
のはそれを言ってみましょう:
CREATE TABLE user_preferences_headers
(
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL
);
CREATE TABLE `users`
(
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`pass` VARCHAR(255) NOT NULL
);
CREATE TABLE `user_preferences`
(
`id_user` INT NOT NULL,
`id_preference_entity` INT NOT NULL,
`value` VARCHAR(255)
);
ALTER TABLE `user_preferences` ADD INDEX (`id_user`);
ALTER TABLE `user_preferences` ADD INDEX (`id_preference_entity`);
ALTER TABLE `user_preferences` ADD FOREIGN KEY (`id_user`) REFERENCES `users` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ;
ALTER TABLE `user_preferences` ADD FOREIGN KEY (`id_preference_entity`) REFERENCES `user_preferences_headers` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ;
今、あなたはファーストネームでuser_preferences_headers
からすべてのヘッダーを選択するか、ではない、とあなたは(idでも識別される)、ユーザの所望のプリファレンス値を選択するために、IDを使用してから、 user_preferences
。 user_preferences_headers
のエントリを削除すると、削除された行のIDにリンクするすべてのエントリも削除されます。
+1を正規化します。これは本当に良いアイデアです。 – Herbert