2017-06-25 8 views
0

私は、ユーザIDとユーザ名を持つテーブルがあり、各ユーザIDがそれ自身のテーブルを取得する構造を作成したいと思います。 3番目の列を追加する方法があるかどうか疑問に思っていました。そうでない場合は、これを行う最善の方法です。テーブル内のMySQLの「サブテーブル」?

+3

このアイデアは貧弱なデザインです。これらの「他のテーブル」に格納する内容を説明し、データベースの設計を改善するためにお手伝いします。 –

+1

useridを外部キーとしてテーブルを作成します。 – Filburt

+0

正規化を参照してください – Strawberry

答えて

0

私はこれが良いことだとは思わない。あなたのユーザーのためのテーブルを作成し、次にUserId列を持つ設定テーブルを作成することをお勧めします。

この方法で、結合を使用してユーザー固有のプロパティを参照できます。列を持つ

表のユーザー:ユーザーIDとユーザー名

列を持つ

テーブルの設定:ユーザーID、設定、値

あなたは、あなたがこのSQLを使用することができます組み合わせたものを取得したい場合:

たとえば
SELECT Users.UserId, Username, Setting, Value 
FROM Users 
    INNER JOIN Settings ON Settings.UserId=Users.UserId 
1

ユーザー属性を保存する最も良い方法は、usermetaテーブルを作成することです。次の構造への注意:

ユーザー:

user_id | user_name | user_mail 
-------------------------------- 
1  | ali  | [email protected] 
2  | mahdi  | [email protected] 

Usermeta

meta_id | user_id | meta_key | meta_value 
----------------------------------------- 
10  | 1  | points | 10 
11  | 1  | address | london 
12  | 2  | address | iran 
13  | 2  | is_vip | true 

この形式では、あなたが好きなユーザーには任意の属性を追加することができます。事前定義されていない属性を保存するのに柔軟性があります。この構造では、データの冗長性はありません。

dynamic columnも使用できます。

+0

FWIW、EAVを使用すると、データ型に応じてテーブルを分割するのが好きなので、日付型のテーブル、整数型のテーブル、および文字列型のテーブルがあります。 – Strawberry

+0

これはWordPressでもやっている方法です。それは多くの場合に行くための素晴らしい方法です。 – Blackbam

+0

@Strawberryそれは正しいです。それは一般的な構造です。データ型を考慮する場合、マルチusermetaテーブルを作成してください! – MahdiY

関連する問題