0

これら 2 つのテーブル デザインのどちらかを選択しようとしています。パフォーマンスが優先されます (ジョイントを使用したクエリ)。

複数のテーブル : 各アイテム (またはキー) には独自のテーブルがあります

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
);

1 つの 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 に答える