现在我的(测试版)网站上有一个名为用户数据的表,它存储名称,哈希(密码),ipaddr,会话密钥,电子邮件和消息号。现在我希望用户拥有个人资料描述,签名,位置(可选)以及其他内容。我应该在一个单独的mysql表中吗?或者我应该分享桌子?为什么?
答案 0 :(得分:4)
这称为vertical partitioning,一般来说,无论您选择哪种方式,它都不会有太大的区别。
一种垂直分区方法是从很少更新的字段中拆分频繁更新的字段。想象一下Stack Overflow数据库中的Users
表,包含User_ID
,DisplayName
,Location
等...然后UpVotes
,DownVotes
, LastSeen
,NumberOfQuestionsAsked
等。第一组字段很少更改(仅限于配置文件编辑),而后一组字段经常更改(正常活动时)。
另一种拆分方法可以是频繁访问的数据与很少访问的数据之间。
在某些特定情况下,这种分区可以产生更好的性能。
答案 1 :(得分:0)
使用一张桌子 因为没有理由分开。
答案 2 :(得分:0)
恕我直言,身份验证信息和个人资料信息应该是分开的。这将保护您的数据。当然,如果信任级别很高,您可以使用合并表。但是表中的信息可能会随着时间的推移而增长,最后你必须将它们分开。那么为什么现在要搞乱?
答案 3 :(得分:0)
如果您正在考虑的表格具有一对一的关系,那么通常没有理由这样做。
异常,这两种情况仅适用于有许多列的情况:
如果有一些列总是被填充而剩下的几乎从不 - 在这种情况下,省略第二个表中的空行可以带来一些好处,并且只在需要时才能获取它们。 / p>
如果有一些列会不断被检索/更新,其余列几乎从不。
但同样,这不是你应该在开始时做的优化。如果您的查询代码被合理地隔离,以后就不难做到这一点。
还有一些相关评论答案 4 :(得分:-1)
我认为这取决于您的申请性质,或者您可以说要求。
我更喜欢它应该在不同的表格中。
考虑我需要用户电子邮件,消息编号和商店名称的示例。
因此,当我从表中找到所有用户以及我在同一个表中的所有配置文件相关数据时,我会在结果集中获得所有不需要的列。要解决这个问题,我可以使用我想要的SELECT
列,但这会使我的查询非常难看。
同样,当我需要所有配置文件数据时,我必须在select子句中使用配置文件列。
因此,建议尽可能将表格分开。