createdBy
ほとんどすべてのテーブルにまたはのようなフィールドがありますupdatedBy
。参考までにと思います。
そこにユーザー名を入力するべきだと思いますか、それともuserID
. データベースを直接見る必要がある場合、それは理解を深めることができるか、悪い習慣です。
createdBy
ほとんどすべてのテーブルにまたはのようなフィールドがありますupdatedBy
。参考までにと思います。
そこにユーザー名を入力するべきだと思いますか、それともuserID
. データベースを直接見る必要がある場合、それは理解を深めることができるか、悪い習慣です。
参照レコード(この場合はuserID)を格納するには、常に外部キーを使用します。
保存方法のアプローチについては、必要なものによって異なります。
a)レコードを最後に更新したのは誰かを知りたい場合。
userID
次に、テーブルに列を作成する必要があります。
他のレコードの代わりに外部キーを保存することは常に良いことです。この方法で、ユーザーのすべてのレコードを関連付けてフェッチできるからです。ただし、このアプローチには制限があります。保存できるuserIDは1つだけなので、最後に更新したのは誰かしかわかりません。
b)すべてのレコードを保存する場合、どのユーザーがいつレコードを更新したかを知るために、1対多の関係テーブルに保存する必要があります。例えば
user_log with columns user_id, update_datetime
そしておそらく、ユーザーが何をしたかを伝えるメッセージ列。
ユーザーID。ユーザー名よりも小さくて速いからです。
ユーザーがユーザー名を変更したい場合、すべてのテーブルを更新する必要はありません。これは非常に効率的です。
正規化されたリレーショナルデータ構造を維持するには、常にIDを使用してください。これにより、パフォーマンスが向上し、スケーラビリティが大幅に向上します。制約を含めることができれば、それははるかにクリーンになります。
必ずしも悪いわけではありません。アプリケーションのニーズを守ります。正規化は冗長性を取り除くのに適しています。一方、速度が要因である場合は、そのままにしておくことができます。参加には時間がかかります。また、データの挿入とは、2つのテーブルに挿入することを意味します。
それでもなお、本によると、正規化のために常に+1です:)
後で変更できないものを使用してください。通常、これはuser_idにも当てはまります。
特別な場合には、名前を追加で保存することもできます(結婚前のユーザーの名前、またはその後削除されたユーザーの名前を表示できるようにするため)。ただし、通常は、データベースに(現在の)名前を再度照会します(これは簡単にキャッシュすることもできます)。
ユーザー名の場合は、代理キーの方が適している傾向があります。したがって、あなたの場合、FK (createdBy
および) は、自然キー (ユーザー名) ではなく、updatedBy
代理キー () を参照します。userID
ただし、これはサロゲートが常に自然キーよりも優れているという意味ではありません。次の条件のリストを検討してください。