我正在尝试为我的应用和网络服务设计数据库, 让我们说View属性的表是这样的:
所以View有 prop_id,x,y,width,height,bg_color,txt_color
过了一段时间我需要在这个表中添加一个新列,如:
text_size,has_shadow ...等
属性的类型是动态的,属性的数量也是动态的。
那么我们如何设计这种可扩展的数据库呢?
答案 0 :(得分:2)
当您需要新属性时,可以在表格中添加一列。
我确信人们会建议您尝试使用EAV(实体 - 属性 - 值)模型来适应这些类型的数据库更改,但这是一个巨大的错误,IMO。有非常非常的实例需要调用反模式,而这不是其中之一。
如果您的数据库现在需要跟踪“text_size”,那么可能您的应用程序将需要处理此文本大小的更改。您将不得不按原样更改您的应用程序和/或数据库,因此您不会通过使用EAV模型购买任何东西(除了头痛)。
如果您使用谷歌EAV,那么您可以找到更多关于它的信息以及为什么这是一个坏主意,但简而言之,这使得查询数据库更加困难,性能降低,并使维护变得更加困难,而不是更容易。