微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 其他字段实体的最佳DB结构

我在DB(基于Postgres)中有一个表,它在面向对象编程中就像一个超类.它有一个列’type’,用于确定表中应存在哪些附加列(子类属性).但我不希望表包含所有可能的列(所有可能类型的所有属性).

所以我决定制作一个表,包含’key’和’value’列(即’filename’=’/ file’,或’some_value’=’5′),其中包含对象的任何可能属性,不包括在内在超类表中.并且还创建了一个相关表来包含可用的“键”值.

但是这种架构存在问题 – 认情况下,’value’列应该是字符串数据类型,以便能够包含任何内容.但我不认为转换成字符串是一个很好的决定.绕过此限制的最佳方法是什么?

解决方法

您正在尝试的设计是 Entity-Attribute-Value的变体,它带来了很多问题和效率低下.除了作为最后的手段之外,这对你正在做的事情来说不是一个好的解决方案.

什么是更好的解决方案是fallen888描述的:为每个子类型创建一个“子类型”表.如果你有一个有限数量的子类型,这听起来就像你拥有的那样,这是可以的.然后,您的子类型特定属性可以具有数据类型,如果合适,也可以是NOT NULL约束,如果您使用EAV设计,这是不可能的.

子类表设计的另一个缺点是你不能强制在子类表中存在一行只是因为超类表中的主行说它应该.但这比EAV设计引入的更为温和.

编辑:关于您对任何实体的评论的其他信息,是的,这是一种非常常见的模式.谨防一种称为“多态关联”的破解解决方案,这是许多人在这种情况下使用的技术.

原文地址:https://www.jb51.cc/mssql/74869.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐