Database design 数据库结构:两个表还是一个表?

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

我有两个数据: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 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声明为
    int unsigned
    而不是varchar(15)


用户是个人,公文包不是


两个表。

由于您不想将字段混合在一起,看起来您已经有了最佳解决方案。这只是我的想法,我想听听其他人的想法:)另一个考虑因素是如何查询信息。在查询中是否总是要连接两个表?是的,每个用户都必须有一个portfolioOh当然,将逻辑建模带入其中!:-)这就是我所说的“我真的不想混合使用用户字段和公文包字段”。:)“每个用户只有一个公文包”…直到他们没有为止;-)+1即使当前存在固定的1:1关系,为什么要将这两个表分开,原因也相当广泛!干得好,比尔。