Mysql 这是否应该是一种识别关系?

Mysql 这是否应该是一种识别关系?,mysql,mysql-workbench,relationship,identifying-relationship,Mysql,Mysql Workbench,Relationship,Identifying Relationship,我最初在StackExchange上为数据库管理员发布了这个问题: 但我想它似乎缺少用户。有人能帮我吗 编辑: 好吧,我选择了一种非身份关系,这样用户可以是耐心的,专业的,或者两者兼而有之。虽然在编写查询时需要更多的工作,但似乎工作得更好。感谢大家的回答,他们都有助于我理解数据库。需要了解更多信息才能回答您的问题 用户能耐心吗 用户可以是专业人士吗 用户是否可以是患者和SPIPROFESSIONAL 需要为患者存储哪些其他数据/属性 SpiProfessional需要存储哪些其他数据/属性 好

我最初在StackExchange上为数据库管理员发布了这个问题:

但我想它似乎缺少用户。有人能帮我吗

编辑:
好吧,我选择了一种非身份关系,这样用户可以是耐心的,专业的,或者两者兼而有之。虽然在编写查询时需要更多的工作,但似乎工作得更好。感谢大家的回答,他们都有助于我理解数据库。

需要了解更多信息才能回答您的问题

  • 用户能耐心吗
  • 用户可以是专业人士吗
  • 用户是否可以是患者和SPIPROFESSIONAL
  • 需要为患者存储哪些其他数据/属性
  • SpiProfessional需要存储哪些其他数据/属性

  • 好的,这是我根据你的设计所想的。 对于用户表和患者表,它不应该是1对1关系,因为用户可能不是患者,所以它应该是1对0..1关系

    Spiprofessional也是如此。用户可能不是SpiProfessioanl,因此Spiprofessional的用户表应为1到0..1关系

    我认为这两篇文章值得一看。 1.
    2.

    单击多个链接后,很明显,图表上的基数还不准确。例如,你的职业和假期之间有1:1的关系。这意味着每个SPI专业人员在任何给定时间都在数据库中有一个假期。用户和患者之间也有1:1的关系,因此每个用户都是患者;用户和SpiProfessional之间也有1:1的关系,因此每个用户也是SpiProfessional(由此推断,每个SpiProfessional也是患者)。@JonathanLeffler确切地说,我有第一个身份不明的关系,然后将它们改为识别,并注意到它们现在必须两者兼而有之,很难区分类型。所以它应该是不确定的?有什么建议可以让我们知道用户是否是患者以及他是否也是SPI专业人员吗?你必须知道你正在建模的领域的规则。我们不能告诉你;大多数设计对于某些领域可能是正确的,但哪一个适合您的设计取决于您在现实世界中的规则。这就是说,专业人士与度假者之间的关系不太可能是正确的。SpiProfessional可能存在于数据库中,而没有任何假期记录,SpiProfessional可能会安排或记录多个假期。但是你必须写下关于所有实体的含义的规则,当你弄清楚了这些规则后,其他的规则通常都会落实到位。您可以强制每个SpiProfessional在用户表中都有一条记录;每个病人也是如此。这意味着用户与患者之间以及用户与专业人员之间的关系存在选择性。不清楚某人是否可以同时成为患者和专业人员;例如,没有什么能说明医生不能在保持医生身份的同时打断一条腿并成为一名患者,因此答案可能是“是的,用户可以两者兼而有之,但通常是一个或另一个”。@JonathanLeffler完全正确,因为医生可以打断一条腿,他也可能是一名患者。现在,用户是否存在而不是其中之一。不确定,也许,我们可以稍后决定添加管理员,但不一定在这个范围内。但是你认为这种关系应该是从用户到患者,从用户到专业人员的关系吗。用户必须是患者或专业人员,还是存在既不是患者又不是专业人员的用户?@Lynn感谢大家关注我的问题1。对2.对3.嗯,我想他最好能兼得,是的。3.a。因为这个原因,我不太确定,但也许应该给管理员留下一个理论上的可能性,等等。?4.在患者中,仅使用附加数据varchar 5。SpiProfessional本身不包含任何内容,但其他表都有指向他的链接,比如他的假期、他的职业、他特定职业的工作日程。我还从访问表中添加了一个链接,尽管在这个旧图像中它还不可见。欢迎使用堆栈溢出。一般来说,你应该写一个问题的答案;您可以编辑自己的答案和问题(如果需要,可以多次编辑),即使您是网站的新用户。(你也可以删除自己的答案。)好的,很酷。对不起,我没意识到。还是个新手。谢谢你让我知道。数据库设计没有独特的解决方案,这完全取决于你想要实现什么。从逻辑上讲,最好单独创建一个person表来存储Patient和SpiProfessional的公共属性,但考虑到性能和维护目的,最好删除person表并将这些属性存储在Patient和SpiProfessional表中。