Bekerja dengan data di Azure Data Studio

Selesai

Sekarang setelah model data Anda selesai, saatnya untuk menyisipkan beberapa data dan melihat cara kerja semua elemen yang dibuat dengan tabel.

Dalam latihan ini, Anda akan menjalankan perintah sql untuk melihat bagaimana tabel terkait dalam model data dan bagaimana aturan yang Anda buat diberlakukan.

Membuka lembar kueri baru

  1. Untuk mulai bekerja dengan SQL di Azure SQL Database, Anda perlu membuka lembar kueri baru. Di Azure Data Studio, klik kanan server database kartu di panel kiri dan pilih Kueri Baru.

    Screenshot showing how to select New Query for a query sheet.

  2. Setelah lembar kueri baru terbuka, pastikan Anda tersambung ke carddatabase Azure SQL Database menggunakan menu dropdown Database.

    Screenshot showing how to ensure that you are connected to the carddatabase Azure SQL Database using the Database dropdown.

Bekerja dengan data

Bagian berikut akan menggunakan lembar kueri di Azure Data Studio. Setelah menyalin dan menempelkan perintah ke lembar, Anda dapat menyoroti kode SQL. Setelah disorot, tekan F5 atau pilih tombol Jalankan hijau untuk menjalankan kode SQL di Azure SQL Database Anda.

Screenshot showing how to select the green Run button to run the query in the query sheet.

  1. Untuk memulai, sisipkan baris ke dalam tabel kartu dengan SQL berikut.

    Catatan

    Untuk membuat penyisipan gambar menjadi sederhana, Anda akan mengonversi beberapa teks menjadi varbinary dengan convert perintah SQL.

    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status, card_art)
    values(N'Duck', N'monster',N'white',10,N'Quack Attack', 1, CONVERT(varbinary(max), 'DUCK_PICTURE_HERE', 0));
    
  2. Selanjutnya, tambahkan kode berikut untuk melihat baris baru dalam database dengan select perintah pada tabel kartu.

    select * from dbo.cards;
    
  3. Dalam latihan sebelumnya, Anda mengatur semua kolom untuk tidak menerima nilai NULL kecuali untuk kolom card_text . Uji aturan di sini dengan meninggalkan kolom card_art. Jalankan pernyataan berikut di lembar kueri:

    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status)
    values(N'Sword', N'weapon',N'black',10,N'S Words', 1);
    

    Database tidak akan mengizinkan sisipan dan mengingatkan kita tentang aturan apa yang sedang dilanggar (yang merupakan nilai NULL di kolom card_art).

    Screenshot showing how NULL values in the card_art column are not allowed.

  4. Penyisipan SQL berikut ini memutus aturan lain yang Anda tetapkan untuk tabel. Di sini, berikan warna "coklat" yang Anda tahu bahwa itu bukan nilai yang diterima. Anda membuat aturan bahwa hanya warna oranye, hitam, hijau, biru, putih, dan merah yang akan diterima di kolom.

    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status, card_art)
    values(N'Sword', N'weapon',N'brown',10,N'S Words', 1, CONVERT(varbinary(max), 'SWORD_PICTURE_HERE', 0));
    

    Dan seperti yang Anda lihat, sisipan ini tidak akan diterapkan ke database karena melanggar aturan untuk card_color.

    Screenshot showing how the query violated the rule for card_color by passing in brown.

  5. Beralih ke tabel card_translations , Anda dapat melihat bagaimana kunci asing mencegah penyisipan yang tidak memiliki baris yang sesuai dalam tabel induk. Pernyataan SQL berikut akan mencoba menyisipkan baris ke dalam tabel card_translations tetapi dengan card_id2. Hanya ada satu baris dalam tabel kartu, dan yang memiliki card_id1. Salin dan tempel pernyataan SQL berikut dan jalankan di lembar kueri:

    Insert into dbo.card_translations(card_id, translation_card_language, translation_card_name, translation_card_text)
    values(2,N'Spanish',N'Pato',N'Ataque de graznar')
    

    Kunci asing mencegah penyisipan, seperti yang diharapkan:

    Screenshot showing how a foreign key prevents the insert with a card_id not in the cards table.

  6. Dengan menggunakan card_id yang benar, Anda bisa membuat baris dalam tabel terjemahan dengan menjalankan SQL berikut ini di lembar kueri:

    insert into dbo.card_translations(card_id, translation_card_language, translation_card_name, translation_card_text)
    values(1,N'Spanish',N'Pato',N'Ataque de graznar')
    
  7. Dengan baris dalam tabel kartu dan tabel card_translations, gabungkan dua tabel dalam kueri dan dapatkan semua baris yang berbagi card_id umum:

    select c.card_id 'card_id from cards table', 
           t.card_id 'card_id from card_translation table',
           c.card_name, t.translation_card_name
    from dbo.cards c,
            dbo.card_translations t
    where c.card_id = t.card_id;
    

    Screenshot showing query results from the joined cards and card_translations tables.

  8. Pernyataan SQL berikut akan menyisipkan baris ke dalam tabel set. Anda akan menggunakan fungsi GETDATE() bawaan untuk menyisipkan data hari ini dalam format YYYY-MM-DD. GETDATE Meskipun fungsi juga mengembalikan jam, menit, dan detik, jenis datanya adalah date, sehingga akan memotong data waktu tambahan tersebut.

    insert into dbo.sets (set_name, set_date)
    values(N'First Set', GETDATE());
    

    Sekarang, jalankan SQL berikut untuk melihat baris dalam tabel set:

    select * from dbo.sets;
    
  9. Kartu berada di tabel kartu dan satu set berada dalam tabel set. Dengan dua baris ini, Anda dapat memasukkan kartu dan set ke dalam tabel set_lists dengan card_id dan set_id. Ada dua kunci asing pada tabel ini, jadi apakah SQL berikut akan berfungsi jika Anda mencoba menyisipkan card_id yang benar tetapi set_id yang salah ke dalam tabel set_lists? Jalankan SQL berikut ini di lembar kueri:

    insert into dbo.set_lists (card_id, set_id)
    values(1,23);
    

    Seperti yang diharapkan, sisipan diblokir oleh pelanggaran kunci asing:

    Screenshot showing how an insert into set_lists table was blocked by foreign key violations.

    Menjalankan kueri dengan ID yang benar akan menghasilkan penyisipan yang berhasil ke dalam tabel set_lists. Jalankan SQL berikut ini di lembar kueri:

    insert into dbo.set_lists (card_id, set_id)
    values(1,1);
    
  10. Dengan data di keempat tabel, gunakan kueri SQL berikut untuk mendapatkan tampilan kartu yang dimasukkan ke dalam database, terjemahannya, dan set tempat mereka berada. Jalankan SQL berikut ini di lembar kueri:

    select c.card_id, c.card_name, 
            t.translation_card_name, 
            s.set_name, s.set_date
    from dbo.cards c,
            dbo.card_translations t,
            dbo.sets s,
            dbo.set_lists l
    where c.card_id = t.card_id
        and c.card_id = l.card_id
        and s.set_id = l.set_id;
    

    A screenshot showing a SQL query joining all 4 tables.

  11. Jika Anda ingat lagi kembali ke bab tentang batasan tabel, ada bagian yang berbicara tentang batasan unik. Batasan ini memungkinkan Anda menerapkan aturan di satu atau beberapa kolom untuk memastikan bahwa tabel tidak memiliki nilai duplikat, mirip dengan kolom Kunci Primer. Melihat tabel set_lists , Anda mungkin memperhatikan bahwa Anda dapat menyisipkan card_id dan set_id ke dalam tabel ini beberapa kali membuat data duplikat. Jika Menerapkan batasan unik, Anda dapat mencegah perilaku ini.

    Anda dapat membuat batasan unik pada kolom card_id dan set_id . Batasan unik ini akan memberi tahu database "jangan biarkan siapa pun menyisipkan baris dengan kombinasi card_id dan set_id yang sudah ada dalam tabel." Jalankan SQL berikut ini di lembar kueri untuk membuat batasan unik ini:

    ALTER TABLE dbo.set_lists   
    ADD CONSTRAINT one_card_in_set UNIQUE (card_id, set_id);   
    GO
    

    Dan sekarang, coba SQL berikut ini lagi:

    insert into dbo.set_lists (card_id, set_id)
    values(1,1);
    

    Anda akan melihat kesalahan saat menghentikan penyisipan ini dan mencegah data duplikat dalam tabel:

    Screenshot showing an error stopping duplicate data being inserted using the unique constraint.

    Dapatkah Anda memikirkan situasi lain di mana batasan unik dapat berguna dalam mencegah data duplikat dalam aplikasi referensi kartu?

  12. Untuk mendapatkan gambaran yang lebih baik tentang bagaimana model data berkumpul untuk aplikasi referensi kartu, Anda dapat menambahkan lebih banyak data ke tabel. Jalankan pernyataan SQL berikut ini di lembar kueri:

    declare @cardTable2 table (card_id int);
    declare @cardTable3 table (card_id int);
    declare @cardTable4 table (card_id int);
    declare @cardTable5 table (card_id int);
    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status, card_art)
    OUTPUT Inserted.[card_id] into @cardTable2
    values(N'Sword', N'weapon',N'white',10,N'+2 Power', 1, CONVERT(varbinary(max), 'SWORD_PICTURE_HERE', 0));
    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status, card_art)
    OUTPUT Inserted.[card_id] into @cardTable3
    values(N'Caterpillar', N'monster',N'green',10,NULL, 1, CONVERT(varbinary(max), 'CRAWLY_PICTURE_HERE', 0));
    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status, card_art)
    OUTPUT Inserted.[card_id] into @cardTable4
    values(N'Goblin', N'monster',N'red',10,N'Can set fires', 1, CONVERT(varbinary(max), 'GOBLIN_PICTURE_HERE', 0));
    insert into dbo.cards (card_name, card_type, card_color, card_power, card_text, card_status, card_art)
    OUTPUT Inserted.[card_id] into @cardTable5
    values(N'Full Plate Armor', N'armor',N'black',10,N'+4 Protection', 1, CONVERT(varbinary(max), 'PLATE_ARMOR_PICTURE_HERE', 0));
    declare @card2i int = (select card_id from @cardTable2);
    declare @card3i int = (select card_id from @cardTable3);
    declare @card4i int = (select card_id from @cardTable4);
    declare @card5i int = (select card_id from @cardTable5);
    insert into dbo.card_translations(card_id, translation_card_language, translation_card_name, translation_card_text)
    values(@card2i,N'Spanish',N'Espada',N'+2 Poder')
    insert into dbo.card_translations(card_id, translation_card_language, translation_card_name, translation_card_text)
    values(@card3i,N'Japanese',N'毛虫',NULL)
    insert into dbo.card_translations(card_id, translation_card_language, translation_card_name, translation_card_text)
    values(@card4i,N'French',N'Lutin',N'Puede provocar incendios')
    insert into dbo.card_translations(card_id, translation_card_language, translation_card_name, translation_card_text)
    values(@card5i,N'German',N'Vollständige Plattenpanzerung',N'+4 Schutz')
    insert into dbo.sets (set_name, set_date)
    values(N'Second Set', GETDATE());
    insert into dbo.set_lists (card_id, set_id)
    values(@card2i,1);
    insert into dbo.set_lists (card_id, set_id)
    values(@card3i,1);
    insert into dbo.set_lists (card_id, set_id)
    values(@card4i,1);
    insert into dbo.set_lists (card_id, set_id)
    values(@card3i,2);
    insert into dbo.set_lists (card_id, set_id)
    values(@card4i,2);
    insert into dbo.set_lists (card_id, set_id)
    values(@card5i,2);
    
  13. Jika Anda menjalankan kueri SQL gabungan empat tabel ini lagi, Anda dapat melihat semua kartu, terjemahannya, dan set tempatnya berada. Jalankan pernyataan SQL berikut ini di lembar kueri:

    select c.card_id, c.card_name, 
            t.translation_card_language,
            t.translation_card_name, 
            s.set_name, s.set_date
    from dbo.cards c,
            dbo.card_translations t,
            dbo.sets s,
            dbo.set_lists l
    where c.card_id = t.card_id
        and c.card_id = l.card_id
        and s.set_id = l.set_id
    order by s.set_id, c.card_id;
    

    Screenshot showing a SQL query joining all four tables with much more data after the additional data was inserted into the tables.