数据库设计:EAV还是EAV?

Sta*_*bie 6 mysql database database-design

假设我有一个具有许多属性的实体,我现在知道一些属性,而其他属性将由用户定义.对此进行建模的最佳方法是什么?

1)我是否有一个主表并将其与辅助名称 - 值对表相关联?所有属性都在辅助EAV表中.

  • 要么 -

2)我是否在主表中放置了最常见的属性(并非所有用户都需要它们,所以我希望有很多NULL条目)并且具有用户定义属性的辅助EAV表?

  • 要么 -

3)我没有想到的其他一些方法?

Ada*_*son 0

通常,大量空单元很便宜,不值得标准化。#2 的唯一缺点是,如果您有大量的行(数百万 - 可能会出现性能问题)、大量的列(超过大约 20 - 看着数据很烦人),或者 EAV 表上存在许多唯一约束。

尽管如此,现在已经是 2011 年了,现在使用带有数据库抽象层的编程框架是有意义的,这样您就不必直接设计数据库关系。像 Django 的对象关系映射器这样的东西可以让您专注于模型本身,并让最佳实践自行解决(95% 的情况)。本教程将帮助您入门。Django仅适用于Web开发数据库建模。对于非Web环境,其他框架会更好。