0

非キー列の複合キー関数従属性を5番目の通常の形式で表すことは可能ですか?

私は3つのテーブルを持っています、

users
----------
id
name

events
----------
id
name

events_users
---------------------------
id
user_id
event_id
participation_type (ENUM)

私が知っているように、5番目の通常の形式では、テーブルを独自の小さなエンティティで表す必要があります。したがって、events_usersテーブルのparticipation_typeを5番目の通常の形式と呼ぶことはできないと思いますか?

誰かが私にもっと良い解決策を提案できますか?

問題は、CodeIgniterのDataMapperライブラリを使用していて、各テーブルが独立して存在する必要がある、つまり5番目の通常の形式であるということです。

4

1 に答える 1

1

私が知る限り、あなたが与える例はすでに第5正規形になっています。

テーブルの列が非常に少ないため、他の方法でそれらを配置することはできません。

私が知る限り、'participation_type'は、意味的に関連する他の列がないため、NFルールを破ることはありません。

コメントに応じて編集する: おそらくあなたが示唆しているように、これは5NFに関連しないDatamapper/Codeigniterのその他の問題です。

生成されるuser_eventsテーブルにフィールドを追加できない場合は、フィールドをプリエンプトして別のエンティティを作成する必要があります。これを「出席」(またはモデルで意味のあるもの)と呼びましょう。出席には次のフィールドがあります。

出席
----------
id
参加型(ENUM)

次に、出席がユーザーとイベントの両方に関連していることをDatamapperに伝えます。これにより、2つのリンクテーブルが生成されます(または生成するように求められます)。

user_attendance
---------------
id
ユーザーID
出席_id

event_attendance
--------------------------------
id
event_id
出席_id

これらの線に沿って何かを行うと、フィールドを追加できる出席エンティティが作成されます。

免責事項:私はDatamapperについて何も知りません、私はここの行の間を読んでいます

于 2009-05-08T07:27:17.590 に答える