我正在开设一个娱乐网站,为用户推荐节目,并且ID为单个节目添加多个类别,因此我有一个名为shows的数据库表,其中包含有关节目的信息,例如预览图像,名称,开始日期等等。我有另一个类别表,所以我想问我应该如何规划数据库,每个节目都有自己的类别。
答案 0 :(得分:0)
答案 1 :(得分:0)
我建议使用数据透视表。
CREATE TABLE `categories` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `categories` (`id`, `name`) VALUES
(1, 'Kids and Family'),
(2, 'Adult Content'),
(3, 'Teen'),
(4, 'Cartoon'),
(5, 'Unrated'),
(6, 'Movie'),
(7, 'Series');
CREATE TABLE `shows` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL,
`network` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `shows` (`id`, `name`, `network`) VALUES
(1, 'The Simpsons', 'Fox'),
(2, 'Seinfeld', 'NBC');
CREATE TABLE `show_categories` (
`id` int(10) UNSIGNED NOT NULL,
`show_id` int(10) UNSIGNED NOT NULL,
`category_id` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `show_categories` (`id`, `show_id`, `category_id`) VALUES
(1, 1, 3),
(2, 1, 4),
(3, 1, 7),
(4, 2, 3),
(5, 2, 7);
ALTER TABLE `categories`
ADD PRIMARY KEY (`id`);
ALTER TABLE `shows`
ADD PRIMARY KEY (`id`);
ALTER TABLE `show_categories`
ADD PRIMARY KEY (`id`);
ALTER TABLE `categories`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
ALTER TABLE `shows`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
ALTER TABLE `show_categories`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
然后你可以写一个像这样的JOIN语句来获取给定节目的类别:
SELECT a.name as 'show',c.name as 'category' FROM shows a LEFT JOIN show_categories b ON a.id=b.show_id LEFT JOIN categories c ON c.id=b.category_id
您可以在sql fiddle here中运行上述内容。