我有一张桌子
TransactionHeader
-------------------
ID (PK)
Amount
Date
Payment Type VARCHAR(100)
Customer ID(FK)
我想将付款类型分成自己的表,所以我的数据库看起来像这样
TransactionHeader
-------------------
ID (PK)
Amount
Date
Payment Type ID (FK)
Customer ID(FK)
MsPayment
--------------------
ID
Payment Type VARCHAR(100)
我应该在标准化的哪一步进行?是 3NF、BCNF、4NF 还是 5NF?
我想知道我是否应该在 3NF 中删除它,但是支付类型与交易表中的任何其他属性之间不存在传递依赖关系
将支付类型分离到自己的表中更多地与通过减少冗余并使其更易于维护来改进数据库设计有关,而不是规范化的特定步骤(3NF、BCNF等)。
标准化通常涉及消除数据异常并确保数据有效存储,同时避免更新异常。就您而言,将付款类型移至单独的表是增强可维护性的设计决策,不一定是规范化步骤。它通常被称为“非规范化”,因为它为了改进数据库的某些方面而打破了更高规范化形式的规则。
以下是将付款类型移至其自己的表中的一些原因:
可维护性:如果您预计付款类型将被频繁添加或修改,那么为付款类型创建一个单独的表可以更轻松地管理和更新它们,而无需更改 TransactionHeader 表。
引用完整性:通过使用外键关系将TransactionHeader表链接到MsPayment表,可以保证引用完整性,这意味着TransactionHeader中使用的Payment Types必须存在于MsPayment中。
可扩展性:如果您的应用程序增长并且您需要跟踪与付款类型相关的其他信息(例如描述、属性),则拥有一个单独的表可以在不修改 TransactionHeader 表的情况下进行此类扩展。
因此,您并不是真正遵循特定的规范化步骤,而是改进数据库设计以实现可维护性和数据完整性。这是关系数据库设计中的常见做法,以确保数据库能够适应未来的变化并保持良好的数据完整性。进行此更改后,您的数据库可能仍处于 3NF 或更高级别,因为这样做不会引入任何新的数据异常。