調査用のデータベース テーブルを作成しており、インシデントを報告した人物をログに記録する必要があります。これは、サプライヤー テーブルまたはユーザー テーブルのレコードである可能性があります。これを行う最も簡単な方法は、調査表に suppleir 列と user id 列の両方を含めることですが、それは間違っているようです。これを行うより良い方法は何ですか?
ありがとうございました。
調査用のデータベース テーブルを作成しており、インシデントを報告した人物をログに記録する必要があります。これは、サプライヤー テーブルまたはユーザー テーブルのレコードである可能性があります。これを行う最も簡単な方法は、調査表に suppleir 列と user id 列の両方を含めることですが、それは間違っているようです。これを行うより良い方法は何ですか?
ありがとうございました。
空の列を削除する別の 2 つのテーブルIncidentsReportedBySupplier (IncidentID, SupplierID)
を作成できます。IncidentsReportedByUser (IncidentID, UserID)
しかし、これにはデメリットもあります。その後、誰にも報告されていないインシデントが発生する可能性があります。
あなたのオプションが「間違っているように見える」理由がわかりません。私は一般的に、複数のテーブルに FK を持つ列を持つよりもあなたのアプローチを好みます。あなたのアプローチは、他の列にnullが必要になる場合がありますが、はるかに簡単で明白です。書類は必要ありません。不要で冗長なテーブルはありません...余分な列だけです。
一般的な経験則として、テーブルが少ない = 心配しなければならない関係が少ない = 頭痛が少ない。
サプライヤテーブルとユーザーテーブルの両方に相互に排他的な一意のID番号がある場合、そのIDを「レポーター」として使用する1つの列を持つことができます。
両方に一意のID番号があり、値が重複している可能性がある場合は、次のようにIDに2つの列を使用できます。
`reporter_id`,
`reporter_type`
ここで、タイプは、テーブル名のようなs
、またはu
テーブル名を反映する値にすることができます。これにより、提案した方法で作成されたnull値もすべて削除されます。
最後に、両方のテーブルに一意のID番号がない場合は、1つ与えてください。人に関するデータのテーブルは、主キーを使用するとはるかにうまく機能します!