数据表跟新问题。

时间:2021-08-25 04:13:32
一共有4个表。表之间有关联
要求从其中任何一个表中找到一个记录后。在其他3个表中的相关的一个或者多个纪录都能找出来。应该如何做?


我使用的是c#.

这4个表分别是
歌手表(歌手id,歌手名字)
歌曲表(歌曲id,歌曲名字,歌手id,专辑id)
专辑表 (专辑id,专辑名子,歌手id )
对应歌曲的url表/应为一个歌曲有多个url(歌曲id,url地址)

搜索的时后搜索歌手表的歌手名子字段。歌曲表的歌曲名字字段。专辑表的专辑名子字段。3个地方同时搜索。然后找到的条目根据关联来取出其他的所有相关条目

不知道在数据库中可否直接完成这个关联取出的工作?不会是比如程序先取出歌手id然后再用歌手id在歌手表中在搜索一边把?

另外。由于搜索的是3个表中的3个字段。如何为这3个字段作索引?
有余 歌曲表 数据量比较大。估计有100万左右。。单一查询一次虽然还可以。但是如果查询频率高了就不可以了。所以有想法把这个表中的不同语言的名字分成几个表/然后在程序中判断提交上来的是什么语言。然后选择查询那个歌曲表。但是考虑到有些歌曲名字包含多种语言。比如  china(中国) 就是在英文后面根中文这类的。我打算在两个表中都放入这个条目。即这个歌曲是属于中文的也属于英文的。
同样。对歌手和专辑表。如果有必要也作同样处理。


在回顾一下以上的问题。以免遗漏
1。程序或者数据库中如何做关联的查询?
2。如何做索引。做了索引后如何使用。对于关联查询等什么的有什么限制?
3。表中的数据量太大了。为了达到最低的资源占用量和较好的速度。如何才分数据库/或者有其他跟好地方法?

4。如何更新数据?比如得到了一个原始数据如下:
张雨生 两个永恒 http://www.xxx.com/1.Wma Wma http 2002年 大地的天使 华人男歌手 国语 未知

情况有以下几种:
库中已经有张雨生地其他歌曲。
库中已经有两个永恒这首歌曲。
库中已经有大地的天使这个专辑。
或者以上的任意搭配。
或者是一个全新的条目。
总不能没次加入一个新的条目就搜索数据库一次把?这样如果以后数据量大了。时间可不得了了。数据库中有直接的处理方法么?或者有什么好的建议?

9 个解决方案

#1


你的问题你可以直接到MSDN中看看TableRelation的相关信息。

#2


Select语句不能选出你想要的记录来吗?

#3


GZ!

#4


用存储过程

#5


请问以上各位。可否清楚一点呢。我在这里磕头了。。

#6


哦!哈哈!“磕头”不会吧!

#7


哎呀!不懂C#,但从sql的角度,你可以关联查询:
1、
select * from 歌手表 A join 歌曲表 B on A.歌手id=B.歌手id join 专辑表 C on B.专辑id=C.专辑id where 条件
其中条件你可以写:
歌曲名字='XXX'  或 歌曲名字='XXX' 或 专辑名子='XXX' 或 like 模糊查找 或 他们的组合
2、你对所有id加主键或加外键,对所有名字加非蔟索引
3、你现在的就是很好呀!比你原来有所进步!但你还要多看书...
4、你可以做过程呀!
create procedure 名
@你的那些记录值 varchar(100)
....
as 
begin tran
  if not exists(select 1 from 歌手表 where 歌手名字=@歌手名字)
    insert 歌手表 values (....)
  .....
commit tran

#8


您误会了。我现在需要写入这个数据库。不是读取。

比如得到了一个原始数据如下:
张雨生 两个永恒 http://www.xxx.com/1.Wma Wma http 2002年 大地的天使 华人男歌手 国语 未知

情况有以下几种:
库中已经有张雨生地其他歌曲。
库中已经有两个永恒这首歌曲。
库中已经有大地的天使这个专辑。
或者以上的任意搭配。
或者是一个全新的条目。
总不能没次加入一个新的条目就搜索数据库一次把?这样如果以后数据量大了。时间可不得了了。数据库中有直接的处理方法么?或者有什么好的建议?

#9


得到一个字符串

取得歌曲名字。检查歌曲表是否有这个名子
如果有--则取得这个歌曲对应的id.并且直接把url添加到url表。id号使用获取的id号

如果没有。则取得歌手名子。检查歌手表是否有这个名子。如果有取得歌手id,如果没有则加入后取得id
在检查专辑表是否有这个专辑。如果有责取得id。如果没有就加入后取得id
再在歌曲表中加入歌曲。并且专辑号。歌手号都使用前面获得的数据。在取得歌曲id用来操作url表
在获得url地址。写入url表。id用歌曲id。

这个是我的思路。不知道对不对?
这个用存储过程如何写?

#1


你的问题你可以直接到MSDN中看看TableRelation的相关信息。

#2


Select语句不能选出你想要的记录来吗?

#3


GZ!

#4


用存储过程

#5


请问以上各位。可否清楚一点呢。我在这里磕头了。。

#6


哦!哈哈!“磕头”不会吧!

#7


哎呀!不懂C#,但从sql的角度,你可以关联查询:
1、
select * from 歌手表 A join 歌曲表 B on A.歌手id=B.歌手id join 专辑表 C on B.专辑id=C.专辑id where 条件
其中条件你可以写:
歌曲名字='XXX'  或 歌曲名字='XXX' 或 专辑名子='XXX' 或 like 模糊查找 或 他们的组合
2、你对所有id加主键或加外键,对所有名字加非蔟索引
3、你现在的就是很好呀!比你原来有所进步!但你还要多看书...
4、你可以做过程呀!
create procedure 名
@你的那些记录值 varchar(100)
....
as 
begin tran
  if not exists(select 1 from 歌手表 where 歌手名字=@歌手名字)
    insert 歌手表 values (....)
  .....
commit tran

#8


您误会了。我现在需要写入这个数据库。不是读取。

比如得到了一个原始数据如下:
张雨生 两个永恒 http://www.xxx.com/1.Wma Wma http 2002年 大地的天使 华人男歌手 国语 未知

情况有以下几种:
库中已经有张雨生地其他歌曲。
库中已经有两个永恒这首歌曲。
库中已经有大地的天使这个专辑。
或者以上的任意搭配。
或者是一个全新的条目。
总不能没次加入一个新的条目就搜索数据库一次把?这样如果以后数据量大了。时间可不得了了。数据库中有直接的处理方法么?或者有什么好的建议?

#9


得到一个字符串

取得歌曲名字。检查歌曲表是否有这个名子
如果有--则取得这个歌曲对应的id.并且直接把url添加到url表。id号使用获取的id号

如果没有。则取得歌手名子。检查歌手表是否有这个名子。如果有取得歌手id,如果没有则加入后取得id
在检查专辑表是否有这个专辑。如果有责取得id。如果没有就加入后取得id
再在歌曲表中加入歌曲。并且专辑号。歌手号都使用前面获得的数据。在取得歌曲id用来操作url表
在获得url地址。写入url表。id用歌曲id。

这个是我的思路。不知道对不对?
这个用存储过程如何写?