Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 密钥管理器数据库设计_Sql Server 2005_Database Design - Fatal编程技术网

Sql server 2005 密钥管理器数据库设计

Sql server 2005 密钥管理器数据库设计,sql-server-2005,database-design,Sql Server 2005,Database Design,我的任务是使用SQL Server向现有web应用程序添加一些功能 我的客户的业务提供一项服务,向员工发放钥匙,然后员工前往不同的地点执行要求的工作。她想知道谁拥有客户的钥匙。他们有大约100-125名客户和6名员工。她将是唯一使用web gui发布和返回密钥的人 为了获得灵感,我去了谷歌,找到了一个名为KEY ORGANIZER的演示程序,它可以在桌面上运行。它完全符合我的客户的要求,但它是一个桌面应用程序,而不是web应用程序。所以,我想我应该对它进行逆向工程,并根据客户的需求进行定制。桌面

我的任务是使用SQL Server向现有web应用程序添加一些功能

我的客户的业务提供一项服务,向员工发放钥匙,然后员工前往不同的地点执行要求的工作。她想知道谁拥有客户的钥匙。他们有大约100-125名客户和6名员工。她将是唯一使用web gui发布和返回密钥的人

为了获得灵感,我去了谷歌,找到了一个名为KEY ORGANIZER的演示程序,它可以在桌面上运行。它完全符合我的客户的要求,但它是一个桌面应用程序,而不是web应用程序。所以,我想我应该对它进行逆向工程,并根据客户的需求进行定制。桌面应用程序的功能远远超出了我的客户端需要。以下是她正在寻找的内容的高层次概述:

钥匙的发放:

  • 她单击客户姓名旁边的关键图像。假设她为客户提供了3把钥匙,但所有3把钥匙都已签出给员工。她将收到某种警报,说明没有可用的钥匙可供发放,但仍允许她在库存关闭的情况下发放钥匙(因此数据库需要能够处理负值)。如果有可用的钥匙,则转至下一个项目符号

  • 在下一个窗口中,她看到一张表格。(可供选择的员工姓名和日期列表)

  • 她从下拉列表中选择员工,单击OK按钮,模式窗口关闭

  • 每次签出/签入时都会输入一个日志条目,并在每次签入和签出时向员工发送一封电子邮件

  • 返回密钥:

  • 她还希望能够选择客户姓名旁边的按钮,以查看哪些员工当前拥有密钥,并能够选择员工姓名以返回密钥

  • 同样,我的客户希望单击员工的姓名,查看他们是否拥有一份钥匙列表,并能够从列表中返回钥匙

  • 每次签出/签入时都会输入一个日志条目,并在每次签入和签出时向员工发送一封电子邮件

  • 我不需要帮助的网页编码。我只需要一些关于如何正确设置数据库表的指导(例如,关键库存字段是现有表的一部分还是其他表的一部分),以最好地处理循环关键库存场景

    以下是我提出的表格:

    客户\u tbl(现有表格)
    •客户ID
    •键数量(新字段?)
    •键标签(新字段?)

    员工\u tbl(现有表格)
    •员工ID
    •Fn
    •Ln

    KeyJournal\u tbl(新表)
    •日志ID
    •行动日期
    •ActionPerformedID(钥匙问题、钥匙退回、钥匙丢失等)
    •客户ID
    •员工ID
    •库存(从客户处收到的钥匙总数-或者是否应在客户项下?
    •发行人提交日期

    关键库存\u tbl(新表)
    •密钥ID
    •客户ID
    •KeyTotal


    注意:我添加SQL Server 2005标记仅供参考。我不需要SQL语句的帮助,以防标签有误导性。

    我的倾向与您的非常接近。在这里:

    Customer
      customer_id
      name, address, etc, whatever reference info you need
    
    Employee
      employee_id
      name, etc
    
    KeyInventory
      key_id
      description
      customer_id
      qty
    
    KeyCheckout
      employee_id
      key_id
      checkout_date
      return_date
    
    注:

    我在KeyInventory上做了一个描述,因为我假设一个客户可以有多个密钥,并且需要区分它们,比如“Apt 1”和“Apt 2”,或者“仓库”和“办公室”

    当给员工一个密钥时,创建一个带有给定日期的KeyCheckout记录。归还钥匙时,请填写归还日期。如果返回日期为空,则密钥仍然存在

    要查找哪些员工拥有customer@cx的密钥,请执行以下操作:

    选择员工id 来自keyc 在i.key\u id=c.key\u id上加入KeyInventory i 其中i.customer_id=@cx 返回日期为空

    要查找key@kx中还有多少可用:

    选择i.qty-计数(c.employee\U id) 来自KeyInventory i 在c.key\u id=i.key\u id和c.return\u date上加入KeyCheckout c 其中i.key_id=@kx

    等等

    您肯定希望在return\u date上有一个索引,或者可能需要KeyCheckout(key\u id,return\u date)和KeyCheckout(employee\u id,return\u date),因为这个表会变得非常大,如果没有索引,查询速度会非常慢

    我认为您的日记账表与我的结帐类似。我只是将checkout和return字段放在一个记录中,以便更容易地确定密钥是否仍然存在。对于输入和输出的单独记录,您必须匹配它们,这是一种痛苦

    不要将数量放入日记账类型记录中。这不是“事务”的属性,而是键本身的属性。它属于库存表

    不要将关键数量放在客户记录中。如果您需要知道客户有多少不同的密钥,只需从keyinventory中选择count(*),其中customer_id=@cx。将此计数存储在客户记录中只会产生与实际关键记录数不匹配的可能性

    我不确定“钥匙标签”是什么。如果这是对密钥的描述,则它属于密钥库存记录,因为客户可能有多个密钥。我认为说客户只能拥有一把钥匙是没有道理的。即使今天您的客户恰好是这样,似乎一个客户将来可能有多个密钥,也可以考虑使用多个密钥

    我认为您的库存是非序列化的,即同一把锁的3把钥匙没有区别,只是“数量3”,对吗?如果他们