MySQL“子表”在表中?

MySQL “subtable” in a table?

本问题已经有最佳答案,请猛点这里访问。

我想创建一个结构,其中有一个带有用户标识和用户名的表,每个用户标识获取它自己的表。 我想知道是否有办法添加第三列,其类型是它自己的表。 如果不是最好的方法是什么。


我认为保存用户属性的最佳方法是创建一个usermeta表。 注意以下结构:

用户:

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

Usermeta

1
2
3
4
5
6
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

在此表单中,您可以为任何所需的用户添加任何属性。 它可以灵活地保存没有预定义的属性。 在这种结构中,您没有数据冗余。

您也可以使用动态列。


我认为这不是一件好事。 您最好为您的用户创建一个表,然后再创建一个包含UserId列的设置表。

这样,您可以使用连接引用用户特定的属性。
例如:

表具有列的用户:UserId和Username

带有列的表设置:UserId,Setting,Value

如果你想要那些组合你可以使用这个SQL:

1
2
3
SELECT Users.UserId, Username, Setting, Value
FROM Users  
    INNER JOIN Settings ON Settings.UserId=Users.UserId