gpt4 book ai didi

mysql - 哪个是mysql最好的数据库设计

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:19 27 4
gpt4 key购买 nike

我是数据库新手,我将在这里与大家分享2个数据库表设计,我只是想知道哪个是最好的设计,为什么?

第一个我创建了用户表、主题表和 user_subject 表。

在用户表中,我保存了用户信息,在主题中,我保存了主题。在 user_subject 中,我保存了用户 ID 和主题 ID。

CREATE TABLE IF NOT EXISTS `subjects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Table structure for table `user_subjects`
--

CREATE TABLE IF NOT EXISTS `user_subjects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`subject_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

2个>

CREATE TABLE IF NOT EXISTS `subjects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`subject_name` varchar(2000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我已经用逗号 (,) sprat 将用户和它的主题保存在用户表中,而不是创建另一个表来保存用户和主题 ID。

我认为第 2 项是最好的,因为我们不需要将数据保存在第三个表中。请告诉我哪一个是最好的,对 future 最持久。

最佳答案

第一个版本要好得多。以下是您不想使用逗号分隔字符串的一些原因:

  • SQL 没有特别好的字符串函数 -- 基础知识,但仅此而已。
  • 当您将值存储在分隔字符串中时,数据库无法验证数据。对于单独的表,您可以使用外键约束。
  • 对逗号分隔列的查询不能使用标准索引(尽管可以使用全文索引)。
  • 使用逗号分隔的字符串,数据库无法验证主题是否唯一。

第一种方法使用联结表,这是在关系数据库中实现此逻辑的更好方法。

关于mysql - 哪个是mysql最好的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483187/

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