Mysql ERD:如何存储三种不同支付类型的数据

Mysql ERD:如何存储三种不同支付类型的数据,mysql,database-normalization,erd,rdms,Mysql,Database Normalization,Erd,Rdms,假设一个用户有3种不同的付款方式。现金,IBAN,并通过提供某些_文件。每种付款类型都需要自己不同的详细信息 如何将其存储在数据库中 假设用户选择使用其IBAN付款,假设是当前数据库,我是否填写与IBAN选项关联的字段并将其他字段设置为Null?或者有没有更专业的方法来存储数据而不使用这些空值 更新 我在这个问题的答案中找到了解决这个问题的办法,但是,答案仍然不够。如果有人有更详细文档的链接,请让我知道。正如@philipxy所指出的,您询问的是如何在RDBMS中表示继承。有几种不同的方法可以做

假设一个用户有3种不同的付款方式。现金,IBAN,并通过提供某些_文件。每种付款类型都需要自己不同的详细信息

如何将其存储在数据库中

假设用户选择使用其IBAN付款,假设是当前数据库,我是否填写与IBAN选项关联的字段并将其他字段设置为Null?或者有没有更专业的方法来存储数据而不使用这些空值

更新


我在这个问题的答案中找到了解决这个问题的办法,但是,答案仍然不够。如果有人有更详细文档的链接,请让我知道。

正如@philipxy所指出的,您询问的是如何在RDBMS中表示继承。有几种不同的方法可以做到这一点:

  • 将所有属性放在一个表中(根据屏幕截图,这就是您现在拥有的)。使用这种方法,最好将
    NULL
    s存储在不适用的列中——如果没有其他内容,InnoDB表的默认设置使用紧凑的行格式,这意味着NULL列不会占用额外的存储空间。当然,您的查询可能会变得复杂,维护这些表可能会变得繁琐
  • 使用子表存储您的详细信息:

    • 付款(PaymentID、PaymentDate等)
    • CashPaymentDetails(PaymentID、Cash\u details\u 1、Cash\u details\u 2等)
    • IBANPaymentDetails(PaymentID、IBAN\u Detail\u 1等)
    • 通过将基本付款表与其中一个“附属”表联接,可以获得每笔付款的信息:

      选择*
      从付款P内部加入现金付款详细信息C
      C.PaymentID=P.PaymentID

  • 第三个选项是使用实体属性值(EAV)模型。与选项2一样,您有一个基本付款表。但是,不是每个付款方式都有一个表,而是有一个包含付款详细信息的附属表。有关更多信息,请参阅


  • 你好这是一个常见问题。(很明显。)请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用1个变体搜索作为标签的标题和关键字。请参见文本上方的向下投票箭头鼠标。当你有一个非重复代码问题要发布时,请阅读并采取行动。可能重复的请。使用链接/图像仅为方便补充文本和/或文本中无法给出的内容。不要给出没有图例/键的图表。使用编辑功能内联,而不是链接,如果你有代表的话——让你的文章独立。谢谢@philipxy如果你有任何其他问题,你可能认为是我的问题的重复,请告诉我。再次感谢。网上有大量的重复和其他资源,谷歌数据库/sql子类型/超级类型/继承/多态。查看数十本免费在线教科书,了解各种信息建模方法如何处理设计和数据库中的子类型。