抛砖引玉:
歌手类别表: 歌手类别ID,说明
1 正式专辑
2 合辑
歌曲类别表: 歌曲类别ID,说明
1 单唱
2 合唱
歌手表: 歌手ID,姓名,...
歌曲表: 歌曲ID,歌名,歌曲类别
歌手歌曲表:歌手ID,歌手类别ID,歌曲ID
歌手类别表: 歌手类别ID,说明
1 正式专辑
2 合辑
歌曲类别表: 歌曲类别ID,说明
1 单唱
2 合唱
歌手表: 歌手ID,姓名,...
歌曲表: 歌曲ID,歌名,歌曲类别
歌手歌曲表:歌手ID,歌手类别ID,歌曲ID
表2,song表: 字段:s_id(主健,自动增长),s_name(nvarchar(30))
表3,Ablem表:字段: Ab_ID(主键,自增长),Ab_type(tinyint)
表4,Ablem明细表:字段: Ab_DetailID(主键,自增长),Ab_id(外键),s_id(外键),A_id(外键)
1 正式专辑
2 合辑
歌曲类别表: 歌曲ID 歌曲类型
1 单唱
2 合唱
歌手表: 歌手ID,姓名,歌手类型
歌曲表: 歌曲ID,歌名,歌曲类别
歌手歌曲表:歌手ID,歌手类别ID,歌曲ID
id 类别名
1 正式专辑
2 合辑
3 参与专辑
4 电影原声歌曲类别
id 类别名
1 单唱
2 合唱歌手
id 名称 其他...歌曲
id 专辑id 歌手id 歌曲类别id 歌曲名 其他...专辑主表
id 专辑类别id` 专辑名 其他...专辑明细表
id 专辑id 歌曲id 其他...歌曲表(视图)
select *
from 歌曲 a
join 歌手 b on a.歌手id=b.id
join 歌曲类别 c on a.歌曲类别id=c.id专辑表(视图)
select *
from 专辑主表 a
join 专辑类别 b on a.专辑类别id=b.id
join 专辑明细表 c on a.id=b.专辑id
join 歌曲表(视图) d on a.歌曲id=d.id
表要素: 歌手(Artist),专辑(Ablem),歌曲(Song)
关 系:
歌手 -> 正式专辑、合辑、参与专辑、电影原声
歌曲 -> 可能是单唱,或者是合唱页面显示专辑的格式是:(一般一张专辑在12首歌)
歌曲(Song) - 歌手(Artist), 或 歌曲(Song) - 歌手(Artist),歌手(Artist),
*//*专辑数据*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'Ablem_Table' AND Type = 'U')
DROP TABLE Ablem_Table
GO
CREATE TABLE Ablem_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*专辑编号*/
CONSTRAINT PK_Ablem PRIMARY KEY CLUSTERED(No),
Name VARCHAR(30) NOT NULL DEFAULT '', /*专辑名称*/
Kind INTEGER NOT NULL CHECK(Kind IN(1,2,3,4)) DEFAULT 1,/*1.正式专辑、2.合辑、3.参与专辑、4.电影原声*/... ...)
GO
GRANT ALL ON Ablem_Table TO PUBLIC
GO/*歌手数据*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'Artist_Table' AND Type = 'U')
DROP TABLE Artist_Table
GO
CREATE TABLE Artist_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*歌手编号*/
CONSTRAINT PK_Artist PRIMARY KEY CLUSTERED(No),
Name VARCHAR(30) NOT NULL DEFAULT '', /*姓名 */
Sex bit NOT NULL DEFAULT 0, /*性别(0.女 1.男)*/... ...)
GO
GRANT ALL ON Artist_Table TO PUBLIC
GO
/*歌曲数据*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'Song_Table' AND Type = 'U')
DROP TABLE Song_Table
GO
CREATE TABLE Song_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*歌曲编号*/
CONSTRAINT PK_Song PRIMARY KEY CLUSTERED(No,SeqNo),
Name VARCHAR(30) NOT NULL DEFAULT '', /*歌曲名称*/
Kind bit NOT NULL DEFAULT 0, /*0.单唱,1.合唱*/... ...)
GO
GRANT ALL ON Song_Table TO PUBLIC
GO/*专辑明细*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'AblemDtl_Table' AND Type = 'U')
DROP TABLE AblemDtl_Table
GO
CREATE TABLE AblemDtl_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*专辑编号*/
SeqNo INTEGER NOT NULL CHECK(SeqNo >=0) DEFAULT 0,/*序号 */
CONSTRAINT PK_AblemDtl PRIMARY KEY CLUSTERED(No,SeqNo),
AtNo VARCHAR(10) NOT NULL CHECK(No <> ''), /*歌手编号*/
SgNo VARCHAR(10) NOT NULL CHECK(SgNo <> ''), /*歌曲编号*/
CONSTRAINT CNT_AblemDtl_01 UNIQUE(No,AtNo,SgNo),... ...)
GO
GRANT ALL ON AblemDtl_Table TO PUBLIC
GO
1.设计数据库时要注意实体之间的关系:
歌手-专辑(1-N);歌手-歌曲(N-1);专辑-歌曲(1-N)(单曲除外)
2.建议建立三张表,Artist(编号,姓名,性别,籍贯,正式专辑、合辑、参与专辑、电影原声... ...)
Ablem(编号,名称,英文名称,歌手,出版时间... ...)
Song(编号,名称,英文名称,歌手,从属专辑,单唱,合唱... ...)
查询起来的时候就方便多了:SELECT Song.名称,Artist.歌手,从属专辑 --... ...
FROM Artist A,Ablem B,Song C
WHERE A.姓名=B.歌手 AND A.姓名=C.歌手类似就是这样了,希望在建立数据库以及建立关系之前做好系统分析!
(select top 10 id from 歌曲表(视图))
查询第X页,每页Y条记录
http://expert.csdn.net/Expert/topic/2365/2365596.xml?temp=.4768793
--建立数据环境:
USE PUBS
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Artist')
DROP TABLE Artist
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Ablem')
DROP TABLE Ablem
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Song')
DROP TABLE Song
GO
CREATE TABLE Artist(
RowId INT IDENTITY(1,1) NOT NULL,
ArtistId INT PRIMARY KEY NOT NULL,
ArtistName CHAR(20) NOT NULL,
Sex CHAR(4),
Born CHAR(100)
)
GO
CREATE TABLE Ablem(
RowId INT IDENTITY(1,1) NOT NULL,
AblemId INT PRIMARY KEY NOT NULL,
ArtistId INT NOT NULL,
AblemName CHAR(50),
AblemEName CHAR(50),
AblemTime DATETIME
)
GO
CREATE TABLE Song(
RowId INT IDENTITY(1,1) NOT NULL,
SongId INT PRIMARY KEY NOT NULL,
SongName CHAR(50),
SongEname CHAR(50),
ArtistId INT NOT NULL,
AblemId INT NOT NULL,
SongTime DATETIME
)
--创建外键约束
ALTER TABLE Ablem ADD CONSTRAINT [FK_Ablem_Artist] FOREIGN KEY
(
[ArtistId]
)REFERENCES Artist
(
[ArtistId]
)
GO
ALTER TABLE Song ADD CONSTRAINT [FK_Song_Artist] FOREIGN KEY
(
[ArtistId]
)REFERENCES Artist
(
[ArtistId]
)
GO
ALTER TABLE Song ADD CONSTRAINT [FK_Song_Ablem] FOREIGN KEY
(
[AblemId]
)REFERENCES Ablem
(
[AblemId]
)
GO--插入测试数据:
INSERT Artist SELECT 0001,'张学友','男','香港'
UNION ALL SELECT 0002,'周杰伦','男','台湾'
UNION ALL SELECT 0003,'王菲','女','香港'
UNION ALL SELECT 0004,'韩红','女','大陆'
GO
INSERT Ablem SELECT 0001,0001,'他在那里','WHERE IS HE','20021130'
UNION ALL SELECT 0002,0002,'叶惠美','不祥','20031001'
UNION ALL SELECT 0003,0003,'将爱','不祥','20031101'
UNION ALL SELECT 0004,0004,'天亮了','不祥','20020505'
GO
INSERT Song SELECT 0001,'咖啡','COFFER',0001,0001,'20021130'
UNION ALL SELECT 0002,'叶惠美','',0002,0002,'20031001'
UNION ALL SELECT 0003,'将爱','',0003,0003,'20031101'
UNION ALL SELECT 0004,'天亮了','',0004,0004,'20020505'
GO--简要查询举例1:
SELECT ArtistName 歌手,Sex 性别,Born 出身,'《'+LEFT(AblemName,5)+'》' 专辑名称,AblemEName 专辑英文名称
FROM Artist A,Ablem B,Song C
WHERE A.ArtistId=B.ArtistId AND A.ArtistId=B.ArtistId AND B.AblemId=C.AblemId
--结果集:
歌手 性别 出身 专辑名称 专辑英文名称
---------- ---- --------- --------- -----------
张学友 男 香港 《他在那里》 WHERE IS HE
周杰伦 男 台湾 《叶惠美》 不祥
王菲 女 香港 《将爱》 不祥
韩红 女 大陆 《天亮了》 不祥 (所影响的行数为 4 行)--简要查询举例2:
SELECT ArtistName 歌手,'《'+LEFT(AblemName,5)+'》' 专辑名称
FROM Artist A,Ablem B,Song C
WHERE A.ArtistId=B.ArtistId AND A.ArtistId=B.ArtistId AND B.AblemId=C.AblemId
AND SongName LIKE '%将爱%'
--结果集:
歌手 专辑名称
-------------------- --------------
王菲 《将爱 》(所影响的行数为 1 行)
/*
最后:就写到这里吧,更多的需要楼主耐心细致的做好系统分析,根据实际情况设计好数据库
以及表,视图,函数等等的结构。那个时候要是SQL语句不会用了再来提问吧。
*/
http://expert.csdn.net/Expert/topic/2508/2508799.xml?temp=.9612085