そのため、私の学校のプロジェクトの 1 つで、疑似 e コマース Web サイト用のデータベースを作成する必要があります。プロジェクトの指示では、データベースを Boyce-Codd 正規形で実装するように求められていますが、この正規形にはあいまいさがあると思います。
そのようなエンティティを実装するとしましょうUsers
:
Users(*email, username, password, some_other_fields)
(注:*
主キーを意味します)
まず、BCNF をよく理解していれば、このエンティティは BCNF ではありません。username
s が s と同様に一意である場合、email
このエンティティを次のように定義することもできます。
Users(*username, email, password, some_other_fields)
私の最初の質問は、この実体をボイス・コッド正規形で作成する方法ですか?
次に、この BCNF フォームには別の問題がありid
ます。ユーザーが自分のユーザー名と電子メールを変更できると仮定します。主キーも変更されます。私の問題は、エンティティの要素を定義する一時的な定数が実際にないことです。これは、たとえば、ロギングに関するいくつかの問題を意味します。主キーを持つユーザーからのアクションをログに記録すると仮定すると、foo@smth.com
彼の電子メールをfoo2@smth.com
に変更すると、この種のログが得られます。
[foo@smth.com] : action xxx
[foo@smth.com] : action yyy
[foo2@smth.com] : action zzz
次に、電子メールの変更を把握できなければ、先行ログはすべて意味がありません。つまり、誰が誰なのかわかりませんfoo@smth.com
。
次に、私の 2 番目の質問は、時間定数 id (整数など) を使用する方が安全だと思いませんか?