2016-09-05 5 views
1

プライマリキー、名前、パスワードを持つユーザテーブルを作成します。 usersテーブル内のすべての名前を一意にしたい。 これを行う最良の方法はどれですか。コンポジットプライマリキーを定義する最も良い方法

  1. 複合主キーとして(id、name)を定義します。

  2. (id) - >主キーと名前 - >一意のキーを定義します。

なぜあなたは他のものを選択しますか?

+1

複合キー(複数の列から構成されている)がある場合、外部キー関係を使用してそのテーブルを参照するすべてのテーブルは、複合主キー - あなたはPKのちょうど "半分"を参照することはできません - それはすべてか何かです –

+0

名前を一意にしたい場合は、名前の一意性を強制しないので複合キーを持つのは間違いでしょう。 IDと名前を2つの別個のキーにする。あなたが「主キー」として指定したものは違いありません。 – sqlvogel

答えて

2

多くの人があなたに話そうとしますが、「最良の」方法はありません。

idフィールドのような人工的なキーを使用できます。これは通常整数であり、ナチュラルキーで、名前フィールドになります。

どちらを選択するかは、主に個人の好みです。それぞれに長所と短所がありますが、成功したアプリケーションは両方で構築されています。何が最善であるかについて無数の討論を見つけるために "人工対天然キー"を検索してください。

IDフィールドを作成して複合主キーを作成する必要はありません.IDフィールドだけを使用して、名前に一意のインデックスを作成するか、名前フィールドを使用します。 idと悩む。

+0

私はここで述べた両方のステートメントに同意します。まず、普遍的な「最良の」方法はありません。それはすべてあなたが達成する必要があるものにまで下がります。 2番目のステートメントが推論されます。質問の最初のオプションは、複合キーから人工のキー(名前)の代わりに自然のキー(名前)を使用するまで減らされました。私の意見では、複合キー(id、name)はちょうど(name)に比べて何も持ってこないでしょう。 – jirka

関連する問題