Hiển thị kết quả từ 1 đến 3 / 3
  1. #1
    Tham gia
    20-05-2012
    Bài viết
    3
    Like
    1
    Thanked 0 Times in 0 Posts

    Nhờ các bạn kiểm tra giúp đoạn code này!

    create database QUAN_LY_PHIM
    go
    use QUAN_LY_PHIM
    go
    -- Tạo các bảng dữ liệu
    -- Tại bảng theloai
    create table theloai(
    IDtheloai int NOT NULL,
    MoTa nvarchar (100) NULL,
    primary key (IDtheloai)
    )

    -- Tạo bảng tacgia
    create table tacgia(
    IDtacgia int NOT NULL,
    IDphimtieubieu int NOT NULL,
    Hoten nvarchar (50) NULL,
    Ngaysinh datetime NULL,
    primary key(IDtacgia)
    )

    -- Tạo bảng phim
    create table phim(
    IDphim int NOT NULL,
    IDtheloai int NOT NULL,
    NoiDung nvarchar (100) NULL,
    TacGia int NOT NULL,
    primary key (IDphim)
    )

    -- Tạo các ràng buộc khóa ngoại
    ALTER TABLE phim ADD CONSTRAINT FK_phim_theloai FOREIGN KEY(IDtheloai)
    REFERENCES theloai (IDtheloai)

    ALTER TABLE tacgia ADD CONSTRAINT FK_tacgia_phim FOREIGN KEY(IDphimtieubieu)
    REFERENCES phim (IDphim)

    ALTER TABLE phim ADD CONSTRAINT FK_phim_tacgia FOREIGN KEY(TacGia)
    REFERENCES tacgia (IDtacgia)

    -- Nhập liệu cho bảng theloai
    insert into theloai (IDtheloai,MoTa)
    values(1, N'Phim tài liệu')
    insert into theloai (IDtheloai,MoTa)
    values(2, N'Phim tình cảm')
    insert into theloai (IDtheloai,MoTa)
    values(3, N'Phim chiến tranh')

    -- Nhập liệu cho bảng phim
    insert into phim (IDphim,IDtheloai, NoiDung, TacGia)
    values(1,1, N'Chất độc da cam',1)
    insert into phim (IDphim,IDtheloai, NoiDung, TacGia)
    values(2,2, N'Gió và hoa',2)
    insert into phim (IDphim,IDtheloai, NoiDung, TacGia)
    values(3,3, N'Cuộc chiến 10000 ngày',3)

    -- Nhập liệu cho bảng tacgia
    insert into tacgia (IDtacgia,IDphimtieubieu, Hoten, Ngaysinh)
    values(1,1, N'Phạm Trưởng','01/01/1967')
    insert into tacgia (IDtacgia,IDphimtieubieu, Hoten, Ngaysinh)
    values(2,2, N'Hoàng Phương','02/02/1950')
    insert into tacgia (IDtacgia,IDphimtieubieu, Hoten, Ngaysinh)
    values(3,3, N'Văn Cao','05/05/1960')


    Không hiểu sao chỉ nhập liệu được cho bảng thể loại, còn 2 bảng còn lại toàn NULL và báo lỗi xung đột ràng buộc khóa ngoại tại của IDtacgia. Mong các bạn tìm giúp chỗ sai?
    Làm sao để truy vấn xuất thông tin tác giả có nhiều phim nhất?
    Quote Quote

  2. #2
    Tham gia
    10-03-2012
    Location
    Nha Trang
    Bài viết
    192
    Like
    3
    Thanked 33 Times in 31 Posts
    Cơ sở dữ liệu của bạn bị lặp rồi.
    Mỗi phim sẽ chỉ có 1 tác giả, vậy thì phim. TacGia sẽ tham chiếu đến tacgia. IDtacgia

    Vậy tại sao lại còn có khóa ngoại tacgia. IDphimtieubieu tham chiếu ngược lại đến phim. IDPhim, thành ra 2 bảng này chạy lòng vòng lẫn nhau.
    Muốn lấy phim tiêu biểu của 1 tác giả nào đó bạn chỉ cần:

    select IDPhim from phim where TacGia = '.........'

    Muốn nhập được dữ liệu bây giờ bạn chỉ cần xóa cái foreign key FK_tacgia_phim trên, và xóa luôn cột IDphimtieubieu bởi cột này dư thừa ko cần thiết. Và thứ tự nhập liệu: theloai > tacgia > phim

    Truy xuất thông tin tác giả có nhiều phim nhất:

    select top 1 tacgia,count(idphim) as so_luong_phim from phim join tacgia on phim. tacgia = tacgia. idtacgia
    group by tacgia
    order by so_luong_phim asc

  3. Thành viên Like bài viết này:


  4. #3
    Tham gia
    20-05-2012
    Bài viết
    3
    Like
    1
    Thanked 0 Times in 0 Posts
    Rất cảm ơn chet7h45 đã chỉ ra chỗ sai, mình cũng nghĩ như thế, đúng là CSDL bị lặp. Vậy là giáo viên ra đề sai cho mình rồi! Mình cũng chỉ mới bắt đầu học SQL nên còn nhiều chỗ chưa nắm được!

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •