数据库规范化的最佳实践是什么,其中域表具有自由文本的"Other"选项?



我正在为我的公司规范化数据库,我经常看到的一种模式是使用域查找表来查找值,但也允许"其他";并将结果存储在单独的列中。

有没有一种更干净的方式来表达这一点?

我遵循5NF和域密钥形式的正常形式。在一些表中,这种模式会重复不止一次,所以我们有一个如下表:

╔══════════════╦══════════════════╦═════════════════════╦═══════════════════╦══════════════════════╗
║ appliance_id ║ location_type_id ║ other_location_type ║ appliance_type_id ║ other_appliance_type ║
╠══════════════╬══════════════════╬═════════════════════╬═══════════════════╬══════════════════════╣
║          123 ║                1 ║ {null}              ║                13 ║ Freestanding Boiler  ║
║          124 ║               13 ║ Annex               ║                 1 ║ {null}               ║
╚══════════════╩══════════════════╩═════════════════════╩═══════════════════╩══════════════════════╝

其中,例如,location_type_id&13的appliance_type_id是";其他";在相关查找表中。

例如,位置类型表看起来像这样:

╔═════╦═══════════════╗
║ id  ║ location_type ║
╠═════╬═══════════════╣
║ 1   ║ Living Room   ║
║ 2   ║ Kitchen       ║
║ ... ║ ...           ║
║ 13  ║ Other         ║
╚═════╩═══════════════╝

这可能是最好的解决方案(尽管我可能会将位置和设备类型分为不同的表(。

讨论完之后,我们将按照建议进行文本扫描,并用它来填充我们的查找,然后我们将尝试阻止使用自由文本字段进行查找,暂时将值存储在一个单独的表中,这样我们就不会混淆主表。

最新更新