我对这两种结构感到非常困惑。这两个表的优缺点是什么?哪一个更好,为什么?
表格1
id, name, age, birthdate, address somedata1 somedata1 somedata1 somedata1 somedata1 somedata2 somedata2 somedata2 somedata2 somedata2 somedata3 somedata3 somedata3 somedata3 somedata3
表2
id, col_name, col_value somedata name somedata somedata age somedata somedata birthdate somedata somedata address somedata somedata2 name somedata2 somedata2 age somedata2 somedata2 birthdate somedata2 somedata2 address somedata2 somedata3 name somedata3 somedata3 age somedata3 somedata3 birthdate somedata3 somedata3 address somedata3
通常,第二个表在数据库设计的上下文中是 反模式的 。而且,它还有特定的名称: 实体属性值 (EAV)。在某些情况下,使用这种设计是有道理的,但是这种情况很少见,甚至可以避免。
数据完整性支持
尽管事实是这样的结构似乎更加“灵活”或“先进”,但这种设计仍存在缺陷。
"customer_name"
"name_of_customer"
行重建
此外,在常见情况下,行重构将很糟糕。例如,如果您有5个属性-这将是5个自我表JOIN-s。对于如此简单的情况-乍一看- 情况来说太糟糕了。因此,我什至都不想想象您将如何维护20个属性。
JOIN
我的意思是-不。在RDBMS中,总会有避免这种情况的方法。这太糟糕了。而且,如果打算使用EAV,则最佳选择可能 是非关系 数据库。