私は自分の会社がビジネスローンを管理するためのデータベースを設計しています。各ローンには、個人または企業の保証人を含めることができます。保証人は、借入ビジネスが失敗した場合の財政的支援として機能します。
関係するテーブルは3つあります。ローン、人、会社で、明らかな情報を格納します。私が抱えているジレンマは、ローンと個人または会社との関係を定義して、各ローンの保証人を知る方法です。これを行うために私が見ることができる3つの方法があります:
1.すべての個人または会社の保証人に対して、単一のテーブルGuarantorを作成します。
Guarantor:
pkGuarantorID (int, primarykey)
fkLoanID (foreign key mapping to the primary key of a row in Loan)
fkPersonID (foreign key mapping to the primary key of a row in Person)
fkCompanyID (foreign key mapping to the primary key of a row in Company)
このアプローチの問題は、保証人は個人または会社のみであり、両方ではないため、外部キーの1つが常に空白になることです。
2.2つの異なる種類の保証人を表す2つの新しいテーブルLoan_PersonとLoan_Companyを作成します。
Loan_Person:
pkLoan_PersonID (primary key)
fkLoanID (foreign key mapping to the primary key of a row in Loan)
fkPersonID (foreign key mapping to the primary key of a row in Person)
Loan_Company:
pkLoan_CompanyID (primary key)
fkLoanID (foreign key mapping to the primary key of a row in Loan)
fkCmpanyID (foreign key mapping to the primary key of a row in Company)
明らかにより正規化されており、おそらくより良いオプションですが、これを選択して結果を適切に結合または表示するには、もう少しロジックが必要になります。
3.個人または会社のいずれかを参照する単一のテーブルを作成します。
Guarantor:
pkGuarantorID (primary key)
GuarantorType (signifies either Individual or Company)
fkGuarantorKey (foreign key mapping to a primary key in Person if GuarantorType is Individual, or mapping to a primary key in Company if GuarantorType is Company)
これも良いオプションのようですが、JOINを実行する前にGuarantorTypeの値をチェックする追加の手順が必要になります。
どの方法を追求するかについて誰かアドバイスはありますか?私は、同じような状況にあった人々から話を聞くことを望んでいたので、将来どのような頭痛が引き起こされるか、または回避される可能性があるかを知っています。
ご覧いただき誠にありがとうございます!
編集:@RBarryYoungからのリンクに加えて、同様の質問がある人は、これらの質問も役立つかもしれません: