2011-05-19 6 views
3

私はビデオファイルに関する情報を保持している動作中のSQLiteデータベースを持っています。現在のデザインは以下の通りです。しかし、上司はいくつかの変更を加えることに決めました。 データベース設計のアドバイス

enter image description here

FilePropertiesテーブル

は現在、主キーとしてファイル名を使用しています。ただし、PKは現在、 のファイル名と(ファイル) の位置の両方の複合キーでなければなりません。

これを行うと、この複合キーを他のテーブルの外部キーとして参照する最良の方法は何でしょうか?私は、自動増分プライマリキーを保持する別のテーブルを作成するか、というファイル名のロケーションのどちらかを作成することを考えていました。その後、PKは他のすべてのテーブルとの外部キー参照として使用できます。

かは、現在のFilePropertiesテーブルでfileNameに場所複合キーとは、参照として使用することができ、このフィールドがテーブル内の自動インクリメントし、一意である必要があり、新たなフィールドを追加します。

データベースの設計にはあまり実践的な経験はありませんでしたので、私の問題や現在のデザインに関するアドバイスは大歓迎です。

+1

ファイル名と場所が十分に大きいことを確認してください。 "location"がパスの場合は、50より大きい可能性があります。また、NVARCHARはファイル名のためのより良い選択かもしれません。 – Blazes

+0

+1ブレイズ。はるかに大きな領域が必要になる可能性が高い場合を除き、NVARCHARがデフォルトになります。特にOracleの場合、テキストフィールドは大きなOBjectとして格納されますが、これは使用する苦労です。 –

答えて

3

絶対に自動インクリメントのプライマリキーを使用してください。データの整合性を確保するには、(ファイル名、場所)列にわたって一意のインデックスを作成します。

following wiki articleは、自然なキーの長所と短所について簡単に説明しています。自然キーとは、データから直接取ったキーです。あなたの場合、それは(filename、location)の複合キーになります。要するに、自然なキーは、データによって必要とされる物理的スペースを削減し、すべてのリレーションにわたってキーへの変更を伝播する犠牲を払う。

I(ほぼ)は、使用可能な自然キーがある場合でも、常にテーブルに自動インクリメントIDを持ちます。

3

自動インクリメントされたFileId主キーを追加します。
Location + FileNameに一意の制約を追加します。
複合主キーの使用は避けてください。

関連する問題