1

私はデータベースの概念に非常に慣れておらず、現在データベースの設計方法を学んでいます。以下の列を持つテーブルがあります...

これはmysqlにあります:

1. Names - text - unique but might change in future
2. Result - varchar - not unique
3. issues_id - int - not unique
4. comments - text - not unique
5. level - varchar - not unique
6. functionality - varchar - not unique

上記の列は将来変更される可能性があるため、主キーとして選択できません。そこで、自動インクリメント ID を names_id として作成しました。また、このテーブルを表示する GUI (JTable) もあり、ユーザーは Names.Names に基づいて Result、issues_id、およびコメントを更新します。ここにあるのは大きなテキスト列です。GUI では意味がないため、GUI に names_id を表示できません。GUI で列 2、3、4 の入力を行った後にユーザーがデータベースを更新すると、以下のクエリを使用してデータベースを更新しましたが、where 句で names_id を使用できませんでした。行は JTable にロードされます。

update <tablename> set Result=<value>,issues_id=<value>,comments=<value> 
where Names=<value>;

データベースを更新できましたが、PK を使用せずにデータベースを更新してもよいかどうかを知りたいです。これはどのくらい効率的ですか?ここで代理キーはどのような目的に役立ちますか?

4

1 に答える 1

1

where主キーを参照しない条件を使用してデータベースを更新することはまったく問題ありません。

ただし、インデックスと制約について学びたいと思うかもしれません。複数の行が同じ名前を持つ場合、クエリは複数の行を更新することになる可能性があります。それらが一意であることを確認したい場合は、列に一意制約を作成できます。

主キーは常にその列にインデックスを作成します。このインデックスにより、アクセスが高速になります。にインデックスがない場合name、更新ではテーブル全体をスキャンしてすべての名前を確認する必要があります。フィールドにインデックスを作成することで、これを高速化できます。

于 2013-03-05T14:54:30.187 に答える