库存管理数据库设计

2024-03-18

我正在为我的公司创建一个内部网,我们希望在其中进行库存管理。我们销售和租赁报警系统,我们希望很好地了解哪些产品仍在我们的办公室中、哪些产品已出租或出售、何时出租或出售等。

目前我想到了这个数据库设计:

每次我们创建新合同时,该合同都与地点或商品销售有关。所以我们有一个产品表(它是产品的类型:闹钟、闹钟手表等)和一个项目表,它是项目本身,具有唯一的序列号。我考虑这样做,因为我需要跟踪特定物品的位置,是否在客户房屋(租用),是否已出售等。产品与特定供应商相关,我们可以与该供应商联系。接受命令。但是在这里,我有一个问题,订单表不应该与 Product 相关吗?

这里主要关注的是库存、商品、移动库存之间的联系。我想创建一个设计,让我能够看到特定商品何时从我们的库存中取出,以及何时进入库存并附有日期。这就是我考虑使用 Movement_stock 表的原因。 Type_Movement 可以是 In / Out。 但我在这里有点迷失,我真的不知道如何做得好。这就是为什么我需要一些帮助。


我有同样的需求,这就是我如何解决你的股票变动问题(这也成为我的问题)。

为了模拟股票走势(+/-),我有我的supplying and my order表。供应作为我的+库存,我的订单作为我的-库存。

如果我们停下来,我们可以计算实际库存,并将其转录为以下 SQL 查询:

SELECT
    id,
    name,
    sup.length - ord.length AS 'stock'
FROM
    product
# Computes the number of items arrived
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        supplying
    WHERE
        arrived IS TRUE
    GROUP BY
        productId
) AS sup ON sup.productId = product.id
# Computes the number of order
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        product_order
    GROUP BY
        productId
) AS ord ON ord.productId = product.id

这会给出类似的东西:

id  name            stock
=========================
 1  ASUS Vivobook       3
 2  HP Spectre         10
 3  ASUS Zenbook        0
    ...

虽然这可以为您节省一张表,但您将无法扩展它,因此大多数建模(恕我直言)使用中间stock表,主要是出于性能考虑。

缺点之一是数据重复,因为您需要重新运行上面的查询来更新您的库存(请参阅updatedAt柱子)。

好的一面是客户表现。您将通过 API 提供更快的响应。

我认为另一个缺点可能是如果您管理的是高流量商店。您可以想象创建另一个表来存储正在重新计算库存的事实,并让用户等到重新计算完成(推送请求或长轮询)以检查他/她的每个商品是否仍然可用(库存) >= 用户需求)。但这是另一回事......

无论如何,即使股票重新计算查询使用匿名子查询,它实际上在大多数相对中等的商店中应该足够快。

Note

你看到在product_order,我复制了价格和增值税。这是出于可靠性原因:在购买时冻结价格,并能够使用大量小数重新计算总数(不会损失任何美分)。

希望对路过的人有帮助。

Edit

在实践中,我将它与Laravel https://laravel.com/,我用一个控制台命令 https://laravel.com/docs/master/artisan#writing-commands,它将批量计算我的产品库存(我还使用可选参数仅计算某个产品 ID),因此我的库存始终是正确的(相对于上面的查询),并且我从不手动更新库存表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

库存管理数据库设计 的相关文章

  • 将列从日期转换为日期时间

    我有一个名为Lastmodified 数据类型为Date 但本来应该是DateTime 有没有办法转换列 当我使用 SQL Server Management Studio 的 设计 功能时 出现以下错误 不允许保存更改 您所做的更改需要以
  • 授予对视图的 SELECT 权限,但不授予对基础对象的 SELECT 权限

    我经常读到 视图的目的之一是安全性 允许某些用户访问基础表 而其他用户仅访问派生视图 考虑到这一点 我设计了几个向外部用户提供受限数据集的视图 一切都很好 但在实践中这是行不通的 我授予后SELECT对视图的权限 除非我授予 否则用户无法访
  • 计算日期之间的差异 - Postgres

    我需要计算 3 个不同日期的天数 我需要运行逻辑以从下面的伪逻辑获取整数值 future date 1 future date 2 今天 如何在 PostgreSQL 中实现这一点 为了实现日期相差天数 SELECT DATE PART d
  • C# 中的 SQL 更新语句

    我有桌子 学生 P ID LastName FirstName Address City 1 Hansen Ola 2 Svendson Tove 3 Petterson Kari 4 Nilsen Johan and so on 如何更改
  • 如何从 DATE 中提取小时、分钟和秒

    我有以下查询 select cast max bid ts as TIMESTAMP from my table 我投了max bid ts因为这是双打 我想成为TMESTAMP 这个查询返回类似这样的内容 2016 04 21 12 41
  • 查询计算不同值的数量?

    我在 MS Access 2003 中有一个表 如下所示 url id example com red example com blue example com blue other com red other com orange mor
  • INNER JOIN 与 INNER JOIN (SELECT . FROM)

    同一查询的这两个版本之间的性能有什么区别吗 Version 1 SELECT p Name s OrderQty FROM Product p INNER JOIN SalesOrderDetail s on p ProductID s P
  • SQL SERVER 字符串中的掩码字符

    如何替换 SQL SERVER 中字符串中 x 和 y 字符之间的字符 例如 如果我有 TEST123456 最后有 TE 56 我不知道字符串有多长 但我知道我需要屏蔽字符串中 x 和 y 之间的字符 你可以使用REPLICATE htt
  • 删除多对多关系中的相关行

    我正在删除位于多对多关系的一个站点上的表中的一行 我还想删除该关系另一端的任何相关行 例如 假设我有下表 我想从中删除一行Cars 我还想从中删除任何相关行Drivers当然 任何不再需要的行CarDrivers Table Cars Ca
  • TSQL 多列唯一约束也允许多个 Null

    我目前正在做一些从 MS Access 到 SQL Server 的迁移 Access 允许唯一索引中存在多个 Null 而 SQL Server 不允许 我一直在通过删除 SQL Server 中的索引并添加筛选索引来处理迁移 CREAT
  • 获取SSAS立方体上次处理时间

    在 Excel 中 我与数据多维数据集建立 Analysis Services 连接 我希望能够通过向用户显示最后一次多维数据集处理时间发生的时间来向用户展示数据的最新情况 在 SQL Server Management Studio SS
  • MySQL如何获取可能重叠日期的开始/结束日期之和

    我有一个开始 结束日期表 我想按 id 对其进行分组并对每个 id 的总时间进行求和 例如 fk id start end 3 2014 03 21 10 02 2014 05 01 08 05 3 2014 06 05 05 00 201
  • 如何在 Presto 中删除重复数据

    我有一个 Presto 表 假设它有 id name update time 列和数据 1 Amy 2018 08 01 1 Amy 2018 08 02 1 Amyyyyyyy 2018 08 03 2 Bob 2018 08 01 现在
  • 这段php代码安全吗?

    我知道我应该使用准备好的语句 但我的下一个项目将使用准备好的语句 我只需要完成这个简单的小应用程序 所以我的问题是 以下代码片段安全吗 我使用了 htmlentities 以及 mysql real escape string 因为我认为这
  • 优化 SELECT 和 WHERE 子句中的存储函数调用

    我有一个具有以下结构的 SQL 查询 SELECT storedfunc param table field as f FROM table WHERE storedfunc param table field lt value ORDER
  • PHP md5() 给出与 MySQL md5 不同的输出

    我正在尝试设置登录系统 但无法解决一个问题 PHP 通过 md5 给了我另一个输出 比MySQL 例如 在 PHP 中 password md5 brickmasterj return password 返回 3aa7b18f304e2e2
  • 更新 SQL MS Access 2010

    这已经让我绞尽脑汁了 4 个小时了 我有一个名为 BreakSked 的表 我使用此按钮来使用此 sql 更新表的休息结束时间 strSQL1 UPDATE BreakSked SET BreakSked EndTime Me Text41
  • ORA-01438: 值大于此列允许的指定精度

    有时我们会从合作伙伴的数据库中收到以下错误 i ORA 01438 value larger than specified precision allows for this column i 完整响应如下所示
  • oracle 计算两个字符串中连续匹配的单词

    我想要一个返回两个字符串中单词的顺序匹配数的查询 例子 Table Id column1 column2 result 1 foo bar live foo bar 2 2 foo live tele foo tele 1 3 bar fo
  • 如何在JdbcTemplate中执行多批量删除?

    我想一次删除多个数据库条目 仅当 3 个字段匹配 此处 姓名 电子邮件 年龄 时 才应删除每个条目 如果我只想删除单个属性 我会选择 String sql DELETE FROM persons WHERE email IN JdbcTem

随机推荐

  • 当实例变量呈现为数组列表时类的不变性

    我有一个不可变的类 假设我有一个 ArrayList 类型的成员变量的 getter 方法 在这种情况下 当我获得对该变量的引用时 我可以从中添加或删除一个元素 在这种情况下 不变性似乎受到了侵犯 谁能详细解释一下这个概念 你确实是对的 违
  • Response.Redirect 在 Global.asax 中不起作用

    我创建了一个错误页面来显示所有未处理异常的一般消息 这是Global asax中的代码 HttpContext ctx HttpContext Current string e404 PAGE ctx Request AppRelative
  • 无法读取未定义的“xxx”属性

    我使用的是 Ionic 2 其中一个组件有两个组件 并且使用发射器共享数据 但是当我执行程序时 却出现了这个错误 未捕获的运行时错误 承诺中 TypeError 无法读取属性 未定义类型错误的 BillNo 无法读取属性 BillNo 在
  • 如何使用 git diff -G?

    我正在编写一个小测试套件 该套件运行要在一堆输入文件上进行测试的工具 对于每个输入文件 该工具都会创建相应的输出文件 两者都是 XML 格式 输入和输出文件在 Git 存储库上签入 输出文件带有工具编译时的时间 因此输出文件在被测试工具重新
  • 时间:2019-03-17 标签:c#winform

    我有一个学校项目 我需要创建一个 Windows 窗体应用程序 但就我而言 我需要创建一个控制台应用程序 现在我可以通过按钮从窗口打开控制台 以及一些我不完全理解的代码 但是是否可以在打开win窗体的同时打开控制台 2 控制台可以粘在win
  • Mysql 选择每次出现的 (n) 行[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 在文件中写入特殊字符

    我正在尝试将数据写入 eps 文件 这是我的代码 header Content Type text html charset utf 8 var echo var file test eps file put contents file v
  • 如何在 VS Code 中使用 Windows 内置的 OpenSSH ssh-agent,而不是 Git bash 的?

    我在 Windows 上运行 OpenSSH 使用自秋季 秋季创作者更新以来包含内置 OpenSSH https learn microsoft com en us windows server administration openssh
  • 迁移 NDB 模型属性的正确方法

    我目前在 NDB 中有一个模型 我想更改属性名称而不必接触 NBD 假设我有以下内容 from google appengine ext import ndb class User ndb Model company ndb KeyProp
  • Neo4j 索引创建失败

    我目前正在了解 Neo4j 和图形数据库的功能 我还做了neo4j附带的电影教程 现在我必须处理一个大型数据库 135 GB 500 个 mio nodes 950 个 mio relationships 并且想要为特殊类型的节点添加索引
  • 为什么 this 不能作为成员函数中的默认参数传递?

    我试图将当前的 le ngth 值作为默认参数作为函数参数传递 但编译器显示错误 在此上下文中不得使用 this 谁能告诉我我犯了什么错误 class A private int length public A void display i
  • 在node.js中,全局对象(或头对象)有名称吗?

    如果环境是浏览器 那么我们可以使用 测试this关键字指向window对象 也是全局对象 或者有些书称其为 头对象 如果在node js中 有没有类似这样的名字呢 window 以便 console log this globalObjec
  • 确定线斜率变化的位置(算法)

    如果你绘制下面的数字 你会得到一个 波动性微笑 数字遵循一个线性斜率 左斜率 然后更改为 遵循另一个线性斜率 右斜率 我有几组这样的数据 想知道斜率在哪里 变化 笔记 斜率变化通常发生在点之间 不知道有多少个点有左斜率 有多少个有 正确的斜
  • java 如何打开另一个目录中的文件?

    如何打开不在当前目录中但在另一个目录中的文件 例如 我有一个文件夹 F test 我的文件位于 F test test2 doit txt 和 D test3 doit2 txt 创建文件对象时在参数路径中输入的内容如下 File f ne
  • XSLT - 将前同级元素与当前节点元素进行比较

    我有这个 XML 文件
  • JavaFX 如何滚动 ScrollPane 以使节点位于视口中间?

    我必须创建显示当前时间的时间线 我正在使用 AnchorPane 并将添加的行放置在 ScrollPane 中 我需要模拟1天 滚动窗格宽度为 2880px 每60px为一小时 我的限制是 前一天 12 小时 第二天 12 小时 移动我的线
  • 如何为BackgroundService传递参数?

    我阅读了有关 ASP net core 2 2 的内容 并找到了有关通用主机的参考资料 我尝试在示例下使用 backgroundService 创建控制台应用程序 https github com aspnet AspNetCore Doc
  • 一个值在数组中存在多少次[重复]

    这个问题在这里已经有答案了 我想做的第一件事是找出我在输入中输入的数字是否存在于数组中 这有效 我想做的第二件事是找出它存在的次数 我在这里走的路正确吗
  • 如何将 Flot 与 AngularJS 集成?

    我对 Angular 和 Flot 很陌生 但对 Jquery 和 Javascript 很熟悉 我对如何将 Flot 图表绑定到 Angular 数据模型有点困惑 因为 Flot 是一个 JQuery 插件 我四处搜寻 但未能找到示例 我
  • 库存管理数据库设计

    我正在为我的公司创建一个内部网 我们希望在其中进行库存管理 我们销售和租赁报警系统 我们希望很好地了解哪些产品仍在我们的办公室中 哪些产品已出租或出售 何时出租或出售等 目前我想到了这个数据库设计 每次我们创建新合同时 该合同都与地点或商品