0

映画のテーブルがあり、別のタイトルを保存したいと思います。代替のタイトル/エイリアスを別のテーブルに保存します。ただし、使用するのに最適な主キーが何であるかはわかりません。

movie_id INTフィールドとフィールドがありますalias varchar(255)。主キーは両方のフィールドにある必要がありますか(1つの映画に複数のエイリアスを含めることができるため)?代わりに、主キーに別のフィールドを追加する必要があります。たとえばalias_id、自動インクリメントするだけですが、それ以外の目的はありません。または、このテーブルには主キーが必要ですか?多分それはエイリアスに一意のインデックスを持っているべきであり、主キーは必要ありませんか?

4

3 に答える 3

0

データストレージが効率的で、一致検索操作が高速であるため、すべての場合にidフィールドに主キーを配置します。一意性を強制する場合は、主キーを除いて、必要なフィールドに一意のインデックスを使用します。主キーはデフォルトで必要であり、一意です。

于 2011-04-21T21:30:12.187 に答える
0

あなたのmovie_idはあなたの唯一のPKと自動インクリメントである可能性があります。次に、代替エイリアステーブルにFK movie_idを作成して、altと一致させます。元のタイトルの名前。

movie_id  |  Title
--------------------
1     |  "Jaws"
2     |   "Star Trek"
3     |   "Matrix 3"


movie_id   |   Alt_Title
------------------------
1       |   "Death Shark"
1       |   "Tales of the Deep"
3       |   "Neo is Uber"
1       |   "Another Jaws Title"

alt nameテーブルに挿入するときは、元のタイトルを結合し、そのmovie_idをプルして挿入する必要があります。

于 2011-04-21T21:31:15.037 に答える
0

質問に直接答えるには、movie_idをalt_titleテーブルの外部キーにします。次に、最も簡単なことは、おそらく、alt_titleテーブルの主キーとなる別のalt_title_idフィールドを作成することです。タイトルを主キーにすることはしません。良いキーを作成するには非常に長くて面倒だからです。

このデータで何をしているのかわかりませんが、私の衝動は、プライマリタイトルと代替タイトルの両方を保持する単一のテーブルを作成し、プライマリを識別するためのフラグを設定することです。各映画に関する他のデータがたくさんあると仮定して、基本的な映画レコードから別のテーブルにタイトルを引き出します。それらを1つのテーブルに入れると、プライマリタイトルまたは代替タイトルのいずれかで検索する場合は、次のように言います。

select whatever
from movie_title
join movie using (movie_id)
where title='Java Forever'

なんらかの理由で一次タイトルだけで検索したい場合は、

select whatever
from movie_title
join movie using (movie_id)
where title='Java Forever' and primary=true

2つのテーブルがあるので、プライマリタイトルで検索する場合は、確かに簡単です。ただし、プライマリまたは代替で検索する場合は、ユニオンが必要です。これは遅くて苦痛です。クエリが複雑で、他のいくつかのテーブルで結合したり、一連のフィールドを引き出したりする場合は、結合の各半分で、その余分な複雑さを2回記述する必要があります。

于 2011-04-21T21:58:17.630 に答える