我是新的数据库,我打算与你分享2数据库表设计在这里,我只想知道哪一个是最好的设计,为什么?这是最好的数据库设计为mysql
第一个我创建了一个用户表,主题表和user_subject表。
在用户表中我保存用户信息,并在主题我保存主题。 IN 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 ;
我保存的用户,它的在user表科目昏迷(,),鲱鱼,而不是创建另一个表保存用户和主题标识。
我的第二个问题是最好的,因为我们不需要在第三个表中保存数据。请告诉我哪一个是最好的和持久的未来。
第一个好得多。将数据保存为逗号分隔值,限制了使用索引进行查询的能力。 **顺便说一句**你不需要在第三张桌子上有“ID”。只需用'(用户,主题)'创建一个复合键' –
@JuanCarlosOropeza是正确的。第一个好多了。 – Harman