用于跟踪库存/活畜的数据库

Database to keep track of inventory/ live stock

我正在为我正在进行的一个小项目寻求数据库设计方面的帮助。

简而言之,我想要实现的是说以下 tables:

围场

Cattle_Movements

我希望 'Cattle_Movements' table 像一群牛的所有运动的总结。当牛群从一个围场转移到另一个围场时,它会更新 'Cattle' table.

中的 'Current Paddock' 字段

在这个阶段,我正在尝试锻炼我需要实施的关系、查询和高级流程。

任何帮助将不胜感激。

首先设置一个规范化的 table 结构。制作下面的 tables 并使用数据库 tools-relationships 下功能区上的关系工具将它们连接在一起。要创建关系,请将主键从一个 table 拖动到 table 中相应的同名外键,这将是关系的多边。在弹出窗口中确保选中强制引用完整性、级联更新和级联删除复选框。

我在此规范化中突出显示了两个“多对多关系”。 HerdsPaddocks 是 CattleMovements Table 的更通用的名称。还有其他可能的规范化 table 结构,但细微的差别超出了这个答案的范围。准备就绪后,请查看 table 规范化和多对多关系。

下一步,关闭关系工具,select 从侧边栏和功能区上的创建点击创建表单中的 table。对所有 table 执行此操作。现在我们有了一个可用的数据库,但您需要学习如何使用它。玩吧!

下面我给出了一些游戏建议,但只要玩所有的东西,直到你弄清楚如何使用表格来(添加、搜索、编辑)奶牛、牛群和围场。还要了解为什么要从所有表单中删除主键,以及如何用 CattleTypes Table.

中用户友好的 CattleTypeDesscription 替换外键,例如 Cattle Table 中的 CattleType

从兽群开始 table 并输入一些随机兽群。 (专业提示:除非播放错误率太高,否则不要直接向 table 添加数据)。然后打开牛群表单,您可以在其中浏览和编辑牛群。
玩法tips: 在Table Herds中HerdID既是一个自动编号又是一个主键。它的行为与其他列不同。看看这个。之后从表单中删除 HerdID 文本框,看看会发生什么(一件好事)。如何使用畜群表添加畜群? 继续使用 Cattle 形式,首先确保向 CattleTypes table 添加一些 CattleTypes。然后在某个时候,尝试用 CattleTypeDescription 替换 Cattle Form 中的 CattleTypeID:https://btabdevelopment.com/how-to-change-a-text-box-to-a-combo-box-wont-work-with-data-access-page/ 另外,请注意牛表格有一个子表格,允许您同时 assign/edit 牛群分配。

一旦您习惯了table 添加和编辑数据,请使用查询编辑器。例如,要获取 Paddock 中当前有多少头奶牛 hol​​ds10cattle(我的虚拟数据)。

显示相关数据的查询 1

来自查询 1 的结果:

查询 2 非常接近:

查询 3:给出数字 2:

'Query 3 SQL from SQL pane of query designer
SELECT Count(Cattle.CowName) AS CountOfCowName
FROM Paddocks INNER JOIN ((Herds INNER JOIN (Cattle INNER JOIN CattleHerds ON Cattle.CattleID = CattleHerds.CattleID) ON Herds.HerdID = CattleHerds.HerdID) INNER JOIN HerdsPaddocks ON Herds.HerdID = HerdsPaddocks.HerdID) ON Paddocks.PaddockID = HerdsPaddocks.PaddockID
GROUP BY Herds.HerdName, Paddocks.PaddockName, HerdsPaddocks.HerdPaddockEndDate, HerdsPaddocks.HerdPaddockStartDate
HAVING (((Paddocks.PaddockName)="holds10cattle") AND ((HerdsPaddocks.HerdPaddockEndDate) Is Null) AND ((HerdsPaddocks.HerdPaddockStartDate)<Now()))
ORDER BY HerdsPaddocks.HerdPaddockStartDate;

后续步骤可能包括带有参数的特定围场并在报告中使用查询。