1

作業中のOracleSQLプロジェクトで問題が発生しています。

主キーとして(Customer_id、packet_id、project_id、ticket_id)を持つ(弱い)エンティティ「Ticket」があります。Customer_id、packet_id、project_idも外部キーです。

ただし、チケットはパケットまたはプロジェクトに対してのみ使用でき、両方が主キーに含まれているため、nullにすることはできませんが、実際には一方が常にnullになります。しかし、チケットは常にどちらか一方に属しているため、両方が必要です。

考えられる解決策を考え、すべての製品に1つのIDを作成できると思いましたが、このproduct_idを外部キーとして実装する場合、どのエンティティに許可するかわからないため、別の問題があります。への参照。

テーブルを作成するときに「オプションの主キー」を作成したり、ifステートメントを操作したりする方法はありますか?または、オプションの参照を作成する方法はありますか?if文とケースを試しましたが、うまくいきませんでした。

4

1 に答える 1

1

多くは、これらのエンティティが何を表しているかによって異なります。チケットはパケットまたはプロジェクトのいずれかである可能性があるため、パケットとプロジェクトの両方を組み合わせた上位レベルのエンティティが存在することを意味します。これは、両方の親である新しいテーブルとしてモデル化することも、 PACKETandテーブルPROJECTを組み合わせて、パケットとプロジェクトを区別する列を追加することによってモデル化することもPACKETできますPROJECTTYPEそのTICKET場合、テーブルは新しい親テーブルまたは結合されたテーブルのいずれかを参照します。

ただし、一歩後退すると、TICKETエンティティにが含まれている場合はTICKET_ID、それTICKET_IDだけが主キーになる可能性があります。列がある場合に複合主キーを使用することは珍しいようTICKET_IDです。実際には、さまざまな顧客、パケット、およびプロジェクトに関連するTICKET同じものを含む複数の行をテーブルに許可しますか?単独が主キーである場合、とは両方ともTICKET_IDnull許容の外部キーになる可能性があり、2つのうちの1つが非NULLになるように制約を作成できます。 TICKET_IDPACKET_IDPROJECT_IDCHECK

于 2012-12-17T18:28:04.777 に答える