2012-02-25 9 views
2

私はアプリケーションを開発しており、データベースデザインに関する質問があります。私は 'consultant'と呼ばれるテーブル、 'branch'テーブル、consultant_idと選択されたbranch_idのコレクションを持つテーブルを持っています。データベースデザインSQL - 編集中にチェックボックスの値が挿入されました

新しいコンサルタントの挿入中に、すべてのブランチ名がチェックボックスに表示されます。ユーザーはコンサルタントに関する情報を入力し、特定のチェックボックスを選択します。コンサルタントに関する情報はコンサルタントテーブルに挿入され、選択されたブランチはコンサルタントのIDおよびブランチのIDを含むテーブルconsultant_branchに挿入されます。このデータベース設計は正しいですか?

第2に、保存中にconsultant_branchテーブルに選択したブランチを挿入することを理解しています。しかし、編集中にどうすればいいのですか?すべてのコンサルタントIDを削除し、選択したブランチをconsultant_branchテーブルに再度保存しますか?ここでSQL:

CREATE TABLE IF NOT EXISTS `consultant` (
`id` int(10) NOT NULL AUTO_INCREMENT, 
`name` varchar(50) NOT NULL, 
`street` varchar(50) NOT NULL, 
`plz` varchar(10) NOT NULL, 
`city` varchar(10) NOT NULL, 
`status` int(1) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS `branch` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) NOT NULL, 
    `status` int(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE IF NOT EXISTS `consultant_branch` (
`consultant_id` int(10) NOT NULL, 
`branch_id` int(10) NOT NULL, 
KEY `consultant_id` (`consultant_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


ALTER TABLE `consultant_branch` ADD CONSTRAINT `FK_bbb` FOREIGN KEY (`consultant_id`) REFERENCES `consultant` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; 
+0

「consultant_branch」の主キーとは何ですか? (私はそれが2つの列の組み合わせだと思いますが、なぜirが見つからないのでしょうか?) –

+0

プライマリキーは必要ありません - 私はそう考えています - テーブルにはconsultant_idの複数の同じエントリがあるかもしれないからです。私は、アプローチがうまくいっているかどうかと、ユーザーがコンサルタントの選択されたブランチを編集したときに何をするかを質問します。 – owsata

+0

私は 'PRIMARY KEY'の'(consultant_id、branch_id) '、' FOREIGN KEY' (あなたが既に持っていて、別の 'FOREIGN KEY branch_id REFERENCESブランチ(branch_id)'。 –

答えて

3

これは2つのアプローチです。

  1. oldにありませんすべてのnewを挿入しnewではないこと、すべてのoldを削除しますのは、consultant_banchとoldの新しいリストが古いものであるnewをsuposeしてみましょう。これは、開発者にとって最もデータベースの面倒なアプローチですが、関係表に他の属性がある場合は、プライマリキー(両方のID)またはが他のテーブルによって参照される場合は、が必要です。あなたが言うように

  2. newoldを削除しnewを挿入することによりoldを交換してください。

アナリストは、プレヴィオポイントを考慮してアプリケーションの見通しを増やすことで、ケースに最適なアルゴリズムについて決定します。

いずれにしても、のすべての操作を単一のトランザクションに囲んで、矛盾したデータベースの状態を回避することを忘れないでください。 InnoDBはトランザクションをサポートします。

関連する問題