gpt4 book ai didi

database-design - 数据库结构 : two tables or one?

转载 作者:行者123 更新时间:2023-12-02 07:51:52 25 4
gpt4 key购买 nike

我有两条数据: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;

但是现在查看数据库我认为没有理由有两个单独的表。另一件事是我真的不想混合用户字段和投资组合字段。

遇到这种情况你会怎么做?

非常感谢任何建议。

谢谢!

最佳答案

您可能希望将它们分开的场景:

  • 用户可以在没有投资组合的情况下存在(除了拥有投资组合的用户之外,您还有其他类型的用户吗?)。

  • 可以为没有投资组合的用户创建新的投资组合。

  • 两个用户可以交换投资组合(实际上这会很棘手,因为 userid 是投资组合的主键)。

  • 有一天,您可能会支持每个用户多个投资组合,或每个投资组合多个用户,或两者兼而有之。

  • 您想要管理 SQL 权限以授予某些数据库用户访问一个表而不是另一个表的权限(并且没有支持列级权限或 View 级权限的数据库)。

  • 您想分别备份两个表。

  • 您想分别监控两个表占用的空间。

  • 您真的非常喜欢使用 SELECT * 而不是显式命名列,并且您仍然希望能够选择列的每个子集。而且您不想为此使用 View 。

  • 您希望充分利用 InnoDB 缓冲池来提高性能,缓冲较小的行意味着您可以在相同大小的缓冲区中存储更多的行。提示:将 ip 声明为 int unsigned 而不是 varchar(15)。

关于database-design - 数据库结构 : two tables or one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3347034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com