我该如何设计这个MySQL架构?

时间:2011-11-21 18:42:49

标签: mysql database schema

我正在建立一个社交网络。对于每个用户,我会期待很多关于它们的信息。 Relationship status, work, hometown, school, etc.我确信这些个人资料属性将来会增长和发展。

我应该将它们全部存储在1个表中,每个属性都作为一列吗?

或者我应该为“用户个人资料”创建一个表,包含基本信息......然后还有其他表(学校表,关系表,工作表等)外键吗?

我的问题是:分成多个表时的最佳做法是什么?

3 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是将用户属性存储在与主“user”表分开的表中。该属性表将具有三列,“用户ID”,“属性类型”和“值”。属性类型可以是一些标识符,用于指定您喜欢的任何属性(家乡,学校等)。

User table
------------
UserId
Name

UserAttribute table
---------------------
UserId
AttributeId
Value

Attribute table
------------------
AttributeId
AttributeName

设置此结构后,添加新属性就像向描述属性的Attribute表中添加新行一样简单。然后根据需要在UserAttribute表中填写用户的属性。无需昂贵的ALTER TABLE操作即可添加新列。

答案 1 :(得分:0)

最佳实践(在我看来)是关系数据库设计。

Users Table
-----------
 UserId
 RelationshipId
 StatusId
 WorkId
 HometownId
 SchoolId

Relationships Table
-----------
 RelationshipId
 RelationshipText

等...

答案 2 :(得分:0)

User
    UserId
    Name
    OtherRelativelyStraighforwardUserInformation

Attribute
    AttributeId
    AttributeText

UserAttributes
    UserId
    AttributeId
    Value

这使您可以相对轻松地扩展属性,而无需修改架构。如果你的属性可能是文本vs整数vs其他东西,那么就会出现问题,所以它并不完美,但它非常简单。