一条记录的某个属性有多个值,这样的数据库字段如何设计。

lovefox_zoe 2009-07-21 03:02:16
比如,对电影进行分类。有动作、喜剧、爱情、科幻、动画。但一部电影,既是科幻又是动画的时候,怎么办。

如果我设计一个自动叫movieStyle,可以把“科幻/动画”都写入数据库,但查询的时候,如何解决。难道要读取出来,然后,

按照分割符号/,进行匹配么?效率貌似很低啊。

求高手更好的方法。
...全文
1275 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nanyida0416sushe 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cqq_chen 的回复:]
引用 7 楼 paulxia 的回复:
基础表
属性表:
ID TypeName
1 动作
2 喜剧
3 爱情
4 科幻
5 动画
电影表:
ID MovieName
1 变型金刚
2 龙珠
3 越狱

关系表:
typeID MovieID
1 1
4 ……
[/Quote]
楼主还是好好看看数据库理论啊。。
paulxia 2009-07-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lovefox_zoe 的回复:]
引用 7 楼 paulxia 的回复:
基础表
属性表:
ID    TypeName
1      动作
2      喜剧
3      爱情
4      科幻
5      动画
电影表:
ID    MovieName
1    变型金刚
2    龙珠
3    越狱

关系表:
typeID  MovieID
1          1
4          1
1          2
4          2
5          2


如果用这种方式,那要显示1    变型金刚这部电影,在typeid这里显示的动作和科幻类型,如何查询显示出来哦。因为其他信息都是一样的,这样为了一个影片类型,会不会冗余度太高了啊。
[/Quote]
1.LEFT JOIN:
select att.typeName from 属性表 att left join 电影表 m on att.typeid = m.typeid
where m.movieID=1
2.子查询:
select typeName from 属性表 where typeid in (select teypid from 电影表 where MovieID=1)
lovefox_zoe 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paulxia 的回复:]
基础表
属性表:
ID    TypeName
1      动作
2      喜剧
3      爱情
4      科幻
5      动画
电影表:
ID    MovieName
1    变型金刚
2    龙珠
3    越狱

关系表:
typeID  MovieID
1          1
4          1
1          2
4          2
5          2
[/Quote]

如果用这种方式,那要显示1 变型金刚这部电影,在typeid这里显示的动作和科幻类型,如何查询显示出来哦。因为其他信息都是一样的,这样为了一个影片类型,会不会冗余度太高了啊。
cqq_chen 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paulxia 的回复:]
基础表
属性表:
ID    TypeName
1      动作
2      喜剧
3      爱情
4      科幻
5      动画
电影表:
ID    MovieName
1    变型金刚
2    龙珠
3    越狱

关系表:
typeID  MovieID
1          1
4          1
1          2
4          2
5          2
[/Quote]
顶这个........
gzzwind 2009-07-21
  • 打赏
  • 举报
回复
7、8楼
支持
---涛声依旧--- 2009-07-21
  • 打赏
  • 举报
回复
1、建立一个电影分类表:tblStyle(StyleID,StyleName) StyleID作主键
2、再建立一个电影清单表:tblMovie(MovieID,MovieName,....) MovieID作主键
3、最后建立一个电影清单的分类表:tblMovie_Style(MovieID,StyleID) MovieID,StyleID联合作主键
paulxia 2009-07-21
  • 打赏
  • 举报
回复
基础表
属性表:
ID TypeName
1 动作
2 喜剧
3 爱情
4 科幻
5 动画
电影表:
ID MovieName
1 变型金刚
2 龙珠
3 越狱

关系表:
typeID MovieID
1 1
4 1
1 2
4 2
5 2
gzzwind 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gzzwind 的回复:]
引用 3 楼 gzzwind 的回复:
就用一个字段,对于一部电影,这部电影的属性(动作、喜剧、爱情、科幻、动画)有多少种就有多少个记录与这部电影相对应

查询时,可以使用那个将 一列中的所有值连接起来  这个函数,好似这个函数要自定义的
[/Quote]

查询时也可以用hierarchical query 查询 ,显示为 科幻/动画 这种形式
gzzwind 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gzzwind 的回复:]
就用一个字段,对于一部电影,这部电影的属性(动作、喜剧、爱情、科幻、动画)有多少种就有多少个记录与这部电影相对应
[/Quote]
查询时,可以使用那个将 一列中的所有值连接起来 这个函数,好似这个函数要自定义的
-狙击手- 2009-07-21
  • 打赏
  • 举报
回复
查询时
where charindex('/'+@val+'/','/'+movieStyle+'/') >0
gzzwind 2009-07-21
  • 打赏
  • 举报
回复
就用一个字段,对于一部电影,这部电影的属性(动作、喜剧、爱情、科幻、动画)有多少种就有多少个记录与这部电影相对应
feixianxxx 2009-07-21
  • 打赏
  • 举报
回复
属性表
id name
1 动作
2 喜剧
3 动画片
4 科幻
电影表
filename 属性ID
终结者 1,4
猫和老鼠 2,3
htl258_Tony 2009-07-21
  • 打赏
  • 举报
回复
可以用数字代替字符的方式。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧