表有很多属性

Rob*_*ert 5 mysql database oracle postgresql database-design

我正计划建立一些数据库项目.

其中一个表有很多属性.

我的问题是:什么更好,将类划分为2个单独的表或将所有表分成一个表.下面是一个例子

create table User { id, name, surname,... show_name, show_photos, ...)
Run Code Online (Sandbox Code Playgroud)

要么

create table User { id, name, surname,... )
create table UserPrivacy {usr_id,  show_name, show_photos, ...)
Run Code Online (Sandbox Code Playgroud)

我认为性能相似,因为我可以使用索引.

n8w*_*wrl -2

我会建议一些不同的东西。将来您可能会被要求管理“另一个属性”。您可以只向属性表添加一行,而不是添加一列:

TABLE Attribute
(
    ID
    Name
)
TABLE User
(
    ID
    ...
)
TABLE UserAttributes
(
    UserID FK Users.ID
    Attribute FK Attributes.ID
    Value...
)
Run Code Online (Sandbox Code Playgroud)

大家的评价都很好。我的回答应该更清楚。

我们这样做是为了处理特殊情况,即客户要求我们以某种方式为他们定制我们的网站。我们从不将 NVP '旋转' 到查询中的列 - 我们总是在查询“我应该在这里这样做吗?” 通过查找为客户列出的特定属性。如果存在,那就是“真实”。因此,与其让这些是大量的布尔列(其中大多数对于大多数客户来说都是 false 或 NULL),而且这些功能的数量有增加的趋势,这对我们来说很有效。

  • 这是一个无法很好扩展的建议。众所周知,EAV 表的性能极差,在大多数情况下应该避免使用。 (5认同)