Database design 数据库结构:两个表还是一个表?
我有两个数据:1)用户和2)投资组合。每个用户只有一个公文包。在注册过程中,用户必须填写以下字段:Database design 数据库结构:两个表还是一个表?,database-design,Database Design,我有两个数据:1)用户和2)投资组合。每个用户只有一个公文包。在注册过程中,用户必须填写以下字段: 名字 姓 书名 组合url 电子邮件 密码 目前我的数据库结构如下所示: CREATE TABLE `User` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(80) NOT NULL, `password` varchar(128) NOT NULL, `firstName` varchar(30) NOT N
- 名字
- 姓
- 书名
- 组合url
- 电子邮件
- 密码
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;
但是现在看看数据库,我认为没有理由有两个单独的表。另一件事是我真的不想混合用户字段和公文包字段
在这种情况下你会怎么做
如有任何建议,我们将不胜感激
谢谢大家! 您可能希望将它们分开的场景:
- 用户可以在没有公文包的情况下生存(除了那些有公文包的用户之外,你还有其他类型的用户吗?)
- 可以为没有公文包的用户创建新公文包
- 两个用户可以交换公文包(实际上这很棘手,因为userid是公文包的主键)
- 有一天,您可能会支持每个用户有多个公文包,或者每个公文包有多个用户,或者两者兼而有之
- 您希望管理SQL权限,以使某些数据库用户能够访问一个表,而不能访问另一个表(并且没有支持列级权限或视图级权限的数据库)
- 您希望分别备份这两个表
- 您希望分别监视这两个表所占用的空间
- 您确实非常喜欢使用
而不是显式地命名列,并且您仍然希望能够选择列的每个子集。您不想使用视图来实现这一点SELECT*
- 您希望从InnoDB缓冲池中获得最大的性能,而缓冲较小的行意味着您在相同大小的缓冲区中存储更多的行。提示:将ip声明为
而不是varchar(15)int unsigned
两个表。由于您不想将字段混合在一起,看起来您已经有了最佳解决方案。这只是我的想法,我想听听其他人的想法:)另一个考虑因素是如何查询信息。在查询中是否总是要连接两个表?是的,每个用户都必须有一个portfolioOh当然,将逻辑建模带入其中!:-)这就是我所说的“我真的不想混合使用用户字段和公文包字段”。:)“每个用户只有一个公文包”…直到他们没有为止;-)+1即使当前存在固定的1:1关系,为什么要将这两个表分开,原因也相当广泛!干得好,比尔。