当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《其他字段实体的最佳DB结构》经验,为你挑选了1个好方法。

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

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

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



1> Bill Karwin..:

您的实验设计是一个变化的实体-属性-值,它配备了一大堆的问题和低效率.除了作为最后的手段之外,这对你正在做的事情来说不是一个好的解决方案.

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

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

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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有