抛砖引玉:
歌手类别表: 歌手类别ID,说明 
       1  正式专辑
       2  合辑  
歌曲类别表: 歌曲类别ID,说明
              1        单唱
              2        合唱
歌手表:  歌手ID,姓名,...
歌曲表:  歌曲ID,歌名,歌曲类别   
歌手歌曲表:歌手ID,歌手类别ID,歌曲ID

解决方案 »

  1.   

    如果就这些内容,建四张表:表1,Artist表:字段:A_id(主键,自动增长),A_name(nvarchar(20))
    表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(外键)
      

  2.   

    歌手类别表:  歌手ID    歌手类型 
           1  正式专辑
           2  合辑  
    歌曲类别表: 歌曲ID        歌曲类型
                  1        单唱
                  2        合唱
    歌手表:  歌手ID,姓名,歌手类型 
    歌曲表:  歌曲ID,歌名,歌曲类别   
    歌手歌曲表:歌手ID,歌手类别ID,歌曲ID
      

  3.   

    专辑类别
    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
      

  4.   

    一流设计:/*
    表要素: 歌手(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
      

  5.   

    补充几点,请楼主注意:
    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.歌手类似就是这样了,希望在建立数据库以及建立关系之前做好系统分析!
      

  6.   

    歌曲 - 歌手(1-N)的SQL语句如何实现呢
      

  7.   

    --我的表结构的话,查询11~20的select top 10 from 歌曲表(视图) where id not in
    (select top 10 id from 歌曲表(视图))
      

  8.   

    分页的问题可以参考我的贴子:
    查询第X页,每页Y条记录
    http://expert.csdn.net/Expert/topic/2365/2365596.xml?temp=.4768793
      

  9.   

    --就做个简单的例子吧(从简):
    --建立数据环境:
    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语句不会用了再来提问吧。
    */
      

  10.   

    新开贴:
    http://expert.csdn.net/Expert/topic/2508/2508799.xml?temp=.9612085