我有两个数据: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;
Run Code Online (Sandbox Code Playgroud)
但现在查看数据库,我认为没有理由有两个单独的表.另一件事是我真的不想混合用户字段和投资组合字段.
在这种情况下你会做什么?
任何建议都非常感谢.
谢谢!
您可能希望将它们分开的场景:
用户可以在没有投资组合的情况下存在(除了拥有投资组合的用户之外,您还有其他类型的用户吗?).
可以为没有的用户创建新的投资组合.
两个用户可以交换投资组合(实际上这很棘手,因为用户标识是投资组合的主要关键).
您可能有一天会支持每个用户的多个投资组合,或每个投资组合的多个用户,或两者.
您希望管理SQL权限以使某些数据库用户可以访问一个表而不能访问另一个表(并且没有支持列级权限或视图级权限的数据库).
您想要分别备份这两个表.
您希望分别监视两个表占用的空间.
您真的非常希望使用SELECT *
而不是明确命名列,并且您仍然希望能够选择列的每个子集.而且你不想为此使用视图.
您希望充分利用InnoDB缓冲池的性能,缓冲较小的行意味着在相同大小的缓冲区中存储更多行.提示:声明ip int unsigned
而不是varchar(15).
归档时间: |
|
查看次数: |
153 次 |
最近记录: |