答えはシナリオによって異なります。
「誰が」「何を」(現在) 借りたかだけに関心があり、最後の出現を除いて「いつ」には関心がなく、アイテムのコピーが常に 1 つしかないと仮定している場合は、次のように 1 対 1 の関係を使用できます。
CREATE TABLE Person
(
PersonId int IDENTITY(1,1) NOT NULL,
Name nvarchar(30) NOT NULL,
Surname nvarchar(30) NOT NULL,
BorrowItemId int NULL FOREIGN KEY REFERENCES Item UNIQUE,
BorrowDate datetime NULL,
ReturnDate datetime NULL,
ReturnCondition nvarchar(50) NULL,
CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (PersonId ASC),
)
CREATE TABLE Item
(
ItemId int IDENTITY(1,1) NOT NULL,
ItemDescription nvarchar(50) NOT NULL,
CONSTRAINT [PK_Item] PRIMARY KEY CLUSTERED (ItemId ASC)
)
各アイテムの複数のコピーがある場合は、 BorrowItemIdのUNIQUEキーを削除して、関係を1 対多に変更する必要があります。万一に備えて;
個人情報を含む貸出および返却アイテムを表示するには:
SELECT PersonId, Name, Surname, ItemDescription, ReturnDate, ReturnCondition
FROM Person INNER JOIN Item
ON BorrowItemId = ItemId
WHERE BorrowItemId IS NOT NULL
AND ReturnDate IS NOT NULL
WHERE 句に PersonId フィルターを追加して、特定の人物を照会できます
日付情報なしでレコードを挿入したり、日付情報はあるが関連する BorrowItemId がないレコードを挿入したりできるため、これは適切な設計ではありません。多対多を使用して履歴データを保持するか (便利な場合があります)、新しいアイテムを借りるたびに update を使用して上書きすることをお勧めします。