我的问题涉及数据库 - 场景是这样的:
我有一个应用程序可以跟踪人们何时借用物品。我有一个现有的表,可以跟踪他们是谁,他们借了什么等等。我想做的是创建一个单独的表来跟踪这个人借了什么,他们的联系信息,如果他们归还了,等等。
我这样做的想法是在 SQL 中创建一个动态表,该表将保存 1 个人的记录,即
约翰史密斯 DVD;2012 年 7 月 12 日;以良好的状态返回;ETC
由于我仍在学习,我想知道:
这是可能的,可行的,或者如果有更聪明的方法来解决它。
他们的联系信息可以链接到跟踪他们是谁的表格中。
如果您还没有为退货创建表,那么我建议您参考借用表的 ID 并在借用表中设置一个标志,表示该项目已被归还。
我不太确定您为什么要创建一个新表来整理所有信息。如果您想将所有信息放在一起,那么我建议JOIN
在准备语句时使用 SQL 关键字。如果您真的想稍后将信息存储在表中,您可以,但它只会在您的数据库中重复。
关于您可以执行的不同类型连接的教程:http: //www.w3schools.com/sql/sql_join.asp
绝对可以按照您的描述进行。不过,这确实不是一个很好的策略。您的新表完全等同于现有表中的一个附加列,该列将该行标记为属于特定个人。
您的答案取决于您的情况;
如果您只对“谁”借用“什么”(当前)而不是“何时”感兴趣,除了最后一次出现,并且您假设一个项目始终只有 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键,将关系更改为one to many。如果;
要查看借用和归还的物品以及个人信息:
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 的记录。我建议使用多对多并保留历史数据(可能很方便)或在每次借用新项目时使用更新覆盖