【问题标题】:Solving a one-to-one problem in database design解决数据库设计中的一对一问题
【发布时间】:2021-11-19 19:39:04
【问题描述】:

对不起,如果这很明显,但我是数据库设计的新手。

客户必须在租用物品之前进行预订,他会预先提供详细信息,例如预订日期、物品类型等。员工在允许客户租用之前检查物品是否可用。如果有的话,他会在系统中输入项目 ID、租赁日期、归还日期等。

我为此创建两个表是否正确?一份用于预订(包括建议的租赁信息。)和一份用于租赁(包括实际租赁信息)。如果是这样,这些不是一对一的关系吗?我怎样才能解决这种一对一的关系?我应该合并这两个表吗?

【问题讨论】:

  • 在设计模式时,勾勒出将要使用的查询(SELECT, UPDATE 等)。这通常可以帮助您找到架构中的缺陷和尴尬的地方。
  • 我不赞成一对一的关系。然而,在这种情况下有合理的论据(见 Implaler 的回答)。掷硬币。

标签: mysql sql database database-design erd


【解决方案1】:

首先,由于预订可能永远不会以租赁的形式实现,因此这种关系不完全是 1:1 而是 1:(0-1)。

我认为将它们建模为单独的实体是正确的,因为:

  • 它们可能有不同的“生命周期”。
  • 它们很可能具有不同的属性。
  • 与预订相比,租金可能与许多其他实体相关。这些 FK 对出租有意义,但对预订没有意义。

【讨论】:

  • 我可能有这样的事情:“客户”有一对多的“项目预订”。并且“物品预订”与“租赁”多对一
  • @Liam 我认为不应该对租金进行 N:1 预订。这看起来不像你之前描述的那样。无论如何,最终取决于您的具体需求。
【解决方案2】:

我可能是错的,但据我了解,您可以只有 1 个用于出租的表,并有一个名为 status 的列作为枚举 (0,1) 0 可用和 1 出租。我假设您不会同时租用相同的物品。

【讨论】:

  • 嗯,但我还要记录预订数据?就像客户 ID、请求的租赁日期和请求的归还日期一样,将所有未来的预订数据都放在出租表中会不会太笨重?
  • 也许我过于简单了,但您可以有 3 个表,1 个用于客户,1 个用于项目,1 个用于出租,其中 clienteId 和 itemId 为 FK,并且出租表也具有预订日期和状态
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多