mysql数据库如何设计简单电影网站的数据表?

要实现的东西很简单 就只有对电影的增删改查
我现在头疼的地方在于,电影的类型,电影的产地,表如何设计
因为电影的类型肯定不止那么一两种,肯定不可以和电影信息表放在一起,电影的产地也是一样
我不知道如何是好,求解答!

类型表

img


电影表

img


查询语句

img

这是我开的表 这样做是不对的吧 正常应该怎么做呢
我这样做 查询出来的数据是 三个相同的电影名字 和 三个不同的国家名字 这个数据用不了啊
我该如何做呢 请帮帮我最好发出sql语句!

简单的弄一下如下就行

img

img

img

查询的时候,根据自己的需要协商对应的语法就行了,比如groupcancat
SELECT a.name, GROUP_CONCAT(b.type) FROM dianying a left join type b on a.id = b.d_id;

img

再例如,如果要根据类型搜索的话加个wheree过滤一下就好了
SELECT a.name, GROUP_CONCAT(b.type) FROM dianying a left join type b on a.id = b.d_id where b.type = '动作';
或者
select * from(SELECT a.name, GROUP_CONCAT(b.type) as type FROM dianying a left join type b on a.id = b.d_id) t where t.type like '%动作%';

因为不同产地电影名可以相同,所以查出三条记录很正常。
如果你要查询出一条,那需要加上产地过滤。

img

电影的类型,电影的产地弄成外键,与电影的关系是一对多

具体参考一下sql ,具体的字段请自行扩充

-- 电影分类
CREATE TABLE `t_category_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `categoryCode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类编码',
  `categoryName` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--电影产地
CREATE TABLE `t_product_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `productCode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产地编码',
  `productName` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产地名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 电影实体

CREATE TABLE `t_movie_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '电影名称',
    `author` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '导演',
  `remark` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '电影简介',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 电影产地关系表

CREATE TABLE `t_movie_product_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `movie_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '电影id',
    `product_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '产地id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 电影类型关系表
CREATE TABLE `t_movie_category_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `movie_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '电影id',
    `category_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;




设计数据库使用E-R图,图设计好了,数据表字段,类型,主键,外键,索引,SQL语句什么的自然就水到渠成了。

您好,简单画了一个表结构图给你,供参考:

img


三张表的结构如下:

drop table if exists movie_type;

/*==============================================================*/
/* Table: movie_type                                            */
/*==============================================================*/
create table movie_type
(
   id                   int not null,
   name                 varchar(200) not null,
   primary key (id)
);

alter table movie_type comment '影片类型表';
drop table if exists movie_origin;

/*==============================================================*/
/* Table: movie_origin                                          */
/*==============================================================*/
create table movie_origin
(
   id                   int not null,
   name                 varchar(100) not null,
   primary key (id)
);

alter table movie_origin comment '影片产地信息表';

drop table if exists movie;

/*==============================================================*/
/* Table: movie                                                 */
/*==============================================================*/
create table movie
(
   id                   int not null,
   type_id              int not null,
   origin_id            int not null,
   name                 varchar(200) not null,
   time                 timestamp(0),
   primary key (id)
);

alter table movie comment '影片信息表';

alter table movie add constraint "FK_电影:影片产地=1:N" foreign key (origin_id)
      references movie_origin (id) on delete restrict on update restrict;

alter table movie add constraint "FK_电影:影片类型=1:N" foreign key (type_id)
      references movie_type (id) on delete restrict on update restrict;

以上供参考,希望可以帮到你

电影的类型、产地等可以做为数据字典表来设计。
数据字典表如下:
①创建电影类型表
自增ID 电影类型 电影类型编码
ID movieType movieTypeCode
②创建电影产地
自增ID 电影产地 电影产地编码
ID movieSource movieSourceCode

③创建电影信息主表
主键 电影名称 发行日期 导演 票价 电影类型 电影产地
ID movieName movieTime movieDirector moviePrice movieTypeCode MovieSourceCode

如果还有其它附属信息也可以参考此设计,用数据字典形式可以扩展主表一对多的属性,主表记录类型编码值,类型名称变化不影响主表。
以上思路供参考。