您的答案取决于您的情况;
如果您只对“谁”借用“什么”(当前)而不是“何时”感兴趣,除了最后一次,并且您假设一个项目始终只有 1 个副本,那么您可以使用 one一个关系为:
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 键,将关系更改为 一对多。万一;
要查看借用和归还的物品以及个人信息:
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 的记录。我建议使用多对多并保留历史数据(可能很方便)或在每次借用新项目时使用更新覆盖