【问题标题】:should I create another table for 0 or 1 entries?我应该为 0 或 1 个条目创建另一个表吗?
【发布时间】:2011-01-19 18:54:59
【问题描述】:

我有一个 payment_types 表,您可以在其中为某个活动输入不同的付款类型,例如直接借记、信用卡、信用卡存档等。对于每种付款类型,您可以指定是否允许用户分期付款,以及它应该允许的开始和结束日期以及分期付款次数。我是否应该有一个链接到 payment_types 的单独的分期付款表,因为您可以在没有分期付款的情况下进行付款?或者我应该让 payment_types 表中的这些分期付款列为空,以防它不允许分期付款?

编辑:上面提到的开始和结束日期适用于分期付款,而不是付款类型本身。付款类型本身不会有任何日期范围,因为事件本身会有日期范围。

【问题讨论】:

    标签: sql-server database-design normalization


    【解决方案1】:

    如果付款的日期范围不能超过 1 种,请将分期付款信息放入付款类型表中。如果有多个日期范围类型(​​例如每月一次,超过 6 个月)。如果它可以将其放入它自己的表中。如果您确实将其放入自己的表中,那么您的主表中将只有 2 个 FK,1 个用于您的付款类型,1 个用于您的付款计划。如果付款计划 FK 为空,那么您将知道这是一次付款。这意味着您不应该复制您的标志,以显示付款是否在主付款表中有时间表。这将减少重复和错误。

    【讨论】:

    • 谢谢本。你的 cmets 也有帮助,但 sparky 先回答了,所以我给了他答案。
    【解决方案2】:

    由于安装信息(是否允许和日期)与付款类型相关,我会将它们放在同一个表中。另外,我不会使用单独的标志来确定是否允许安装。如果开始和结束日期为 NULL,则不允许分期付款。如果您使用单独的字段,您可能会得到错误的日期(即分期付款标志为 0,但日期不为空)

    如果付款可以有多个日期范围,则单独的表格是有意义的,但由于日期与付款类型直接相关,请将它们放在同一个表格中。

    【讨论】:

    • 日期与分期付款直接相关,与付款方式无关。在这种情况下你的答案会改变吗?
    • 当然,日期属于它们所属的表。如果日期与分期付款有关,而不是付款类型,我肯定会更改我的答案并创建一个链接在一起的单独表格。
    猜你喜欢
    • 2020-05-26
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多