【问题标题】:MYSQL simple data modelingMYSQL简单数据建模
【发布时间】:2016-11-02 23:43:23
【问题描述】:

一名教员可以携带多台校园设备,这些设备是专门分配给一个人的。

此数据模型中的实体会是什么样子,它们之间的关系是什么?

干杯

【问题讨论】:

  • 你说:1个教员可以“拿”多件……而且这种设备是专门分配给1个人的……这是什么意思?尝试准确地制定陈述,因为在建模中,准确性非常重要。

标签: mysql sql data-modeling


【解决方案1】:

教师 (1) 和设备 (n) 之间存在一对多 (1:n) 关系。

所以,我想需要一个 Faculty 表和一个 Equipment 表。每个的主键都是某种唯一 ID(自动生成,如 AUTO_INCREMENT,或显式给出)。

由于 1:n 关系是 Faculty:Equipment,因此您将在 Equipment 表中引用 Faculty.id(“id”是主键的虚构列名)。

因此,这两个表之间的referential-relationship/bridge/match 将是Faculty.id 和Equipment.faculty_id(“faculty_id”是一个虚构的列名,代表相应的Faculty 表的主键):

Faculty.id = Equipment.faculty_id

【讨论】:

    【解决方案2】:

    这是经典的 1:n 关系。为教员准备一张桌子,例如members,ID 为 PK 和 另一个带有assets 的表。这些资产还有一个 ID(与此无关)和一个 FK,比如assigned_to 指的是members表的PK。

    【讨论】:

    • 感谢您的澄清!那会是 1:n 识别还是非识别呢?
    • @JackH 根据this,这将是一个识别关系。
    • 嗯。我重新阅读了那篇文章,现在认为它只是反过来。结论:我不确定。 :-(
    • "一本书属于一个所有者,一个所有者可以拥有多本书。但是图书也可以没有所有者而存在,并且可以改变所有者。一本书和所有者之间的关系是非识别关系。”只需阅读此内容,它就会让我相信它无法识别。设备可以在没有所有者的情况下存在
    【解决方案3】:

    如果您想知道随着时间的推移谁会检查哪些设备,您的设计必须更加复杂一些。您需要介于两者之间的某种设备检出表,以保留检出和检入设备的历史记录。当教员检出设备时,使用指向教员的指针创建 EquipmentCheckout 记录以及设备和DateOut。然后,将 Equipment 记录链接到 EquipmentCheckout 记录。只要 CheckoutId 字段不为空,其他人就无法签出该设备。退回设备时,编辑 EquipmentCheckout 记录,并设置 DateIn,并将该设备的 CheckoutId 设置为 null。然后,您将获得谁检查了什么的历史记录。

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多