PRIMARY KEYを作成して、テーブルを作成し、エントリの重複を避けたい。問題は、このKEYにどの列を追加すべきかわからないことです。次の表を検討してください。
CREATE TABLE `customers` (
`id_c` int(11) unsigned NOT NULL,
`lang` tinyint(2) unsigned NOT NULL,
`name` varchar(80) collate utf8_unicode_ci NOT NULL,
`franchise` int(11) unsigned NOT NULL,
KEY `id_c` (`id_c`),
KEY `lang` (`lang`),
KEY `franchise` (`franchise`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
id_c:顧客のID。それは企業である可能性があります。マクドナルドの
言語:連絡先の言語を想定します。
ボス:ボスの名前
フランチャイズ:ゼロでない場合、それはフランチャイズです。マクドナルドはローマ、パリ、ロンドンにあります...
ご覧のとおり、各企業は国ごとに異なる中央の「ショップ」(連絡先言語)を持つことができますが、都市ごとに異なるフランチャイズを持つこともできます(上司の名前は異なります)。id_c、lang
が区別できない
新しい行を挿入できるようにしたい(同じ国の多くのフランチャイズ)。ただし、名前は次の場合にのみ区別する必要があります(id_c、lang)は同じです(他のid_c、langの組み合わせの場合...名前は同じである可能性があります)。また、フランチャイズは、同じ(id_c、lang)ペアで割り当てられていない場合にのみ同じにすることができます。
主キー(lang
、name
)について考えていましたが、最善の方法ではないかもしれません。このテーブル構造は複雑すぎますか?