我有两条数据:1)用户和2)投资组合。每个用户只有一个投资组合。在注册过程中,用户必须填写以下字段:
目前我的数据库结构如下:
CREATE TABLE `User` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(80) NOT NULL,
`password` varchar(128) NOT NULL,
`firstName` varchar(30) NOT NULL,
`lastName` varchar(30) NOT NULL,
`ip` varchar(15) NOT NULL,
`lastVisit` int(10) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '2',
`created` int(10) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `email_UNIQUE` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `Portfolio` (
`userId` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`url` varchar(45) NOT NULL,
`theme` tinyint(2) NOT NULL DEFAULT '1',
`font` tinyint(2) NOT NULL DEFAULT '1',
`footer` varchar(255) NOT NULL,
`isFeatured` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`userId`),
UNIQUE KEY `id_UNIQUE` (`userId`),
UNIQUE KEY `url_UNIQUE` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
但是现在查看数据库我认为没有理由有两个单独的表。另一件事是我真的不想混合用户字段和投资组合字段。
在这种情况下你会做什么?
非常感谢任何建议。
谢谢!
答案 0 :(得分:5)
您可能希望将它们分开的情景:
用户可以在没有投资组合的情况下存在(除了拥有投资组合的用户之外,您还有其他类型的用户吗?)。
可以为没有的用户创建新的投资组合。
两个用户可以交换投资组合(实际上这很棘手,因为用户ID是投资组合的主键)。
您可能有一天会支持每个用户的多个投资组合,或每个投资组合的多个用户,或两者都支持。
您希望管理SQL权限,以便为一个表提供一些数据库用户访问权限,而不是另一个表访问权限(并且没有支持列级权限或视图级权限的数据库)。
您想要分别备份这两个表。
您希望分别监视两个表占用的空间。
您真的非常希望使用SELECT *
而不是明确命名列,并且您仍然希望能够选择每个列的子集。并且你不想为此使用视图。
您希望充分利用InnoDB缓冲池的性能,缓冲较小的行意味着在相同大小的缓冲区中存储更多行。提示:将ip声明为int unsigned
而不是varchar(15)。
答案 1 :(得分:2)
用户是个人,投资组合不是。
两张桌子。