我正在建立一个社交网络。对于每个用户,我会期待很多关于它们的信息。 Relationship status, work, hometown, school, etc.
我确信这些个人资料属性将来会增长和发展。
我应该将它们全部存储在1个表中,每个属性都作为一列吗?
或者我应该为“用户个人资料”创建一个表,包含基本信息......然后还有其他表(学校表,关系表,工作表等)外键吗?
我的问题是:分成多个表时的最佳做法是什么?
答案 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其他东西,那么就会出现问题,所以它并不完美,但它非常简单。