0

我试图在这两种表设计之间进行选择,性能优先(使用关节查询)

多个表:每个项目(或键)都有自己的表

CREATE TABLE users_languages (
    "user_id" bigint not null,
    "language" integer not null,
    primary key ("user_id", "language"),
    foreign key ("user_id") references users ("user_id") on delete cascade
);

一张 KVP 表:包含所有项目/键

CREATE TABLE users_kvp (
    "user_id" bigint not null,
    "key" varchar not null, -- could be "language" or other
    "value" integer not null,
    primary key ("user_id", "key", "value"),
    foreign key ("user_id") references users ("user_id") on delete cascade
);

我认为对于大多数操作来说最后一个会更慢,对吗?如果是,多少和何时?

4

1 回答 1

1

从对该问题的评论来看,标准化的关系数据结构似乎最适合您的要求。这样的表结构可能类似于:

Users
-----
UserID (PK)
UserName
... (other attributes)

Languages
---------
LanguageID (PK)
LanguageName

UserLanguage
------------
UserID (PK)
LanguageID (PK)

可以将所有用户的语言放到用户表中(如 Language1、Language2 等),但这将是非规范化的一个示例- 在我看来,从提供的信息来看,这不适合您的要求。

于 2012-11-22T12:14:28.663 回答