24-NSIJ2JA1-3

  1. Non, la clé primaire doit pouvoir identifier de manière unique chaque entrée. Or, certaines chansons paratagent un même titre, comme Showbiz.

  2. titre album
    Welcome too the Jungle Appetite for Destruction
  3. SELECT titre
    FROM Chanson
    WHERE album = 'Showbiz'
    ORDER BY titre;
    
  4. INSERT INTO Chanson
    VALUES (10, 'Megalomania', 'Hullabaloo', 'Muse');
    
  5. UPDATE Chanson
    SET titre = 'Welcome to the Jungle'
    WHERE id = 7;
    
  6. Cette séparation en plusieurs tables permet d'éviter la redondance des données (par exemple, ne pas répéter le nom du groupe à chaque chanson).

  7. L'attribut id_album est une clé étrangère qui met en relation la table Chanson avec la table Album.

  8. Le schéma relationnel de la base de données :

    • Chanson(id: INT, titre: TEXT, #id_album: INT)
    • Album(id: INT, année: INT, #id_groupe: INT)
    • Groupe(id: INT, nom: TEXT)
  9. SELECT Album.titre
    FROM Chanson
    JOIN Album ON Album.id = Chanson.id_album
    WHERE Chanson.titre = 'Showbiz';
    
  10. SELECT Chanson.titre, Album.titre
    FROM Chanson
    JOIN Album  ON Album.id  = Chanson.id_album
    JOIN Groupe ON groupe.id = Album.id_groupe
    WHERE Groupe.nom = 'Muse';
    
  11. La requête renvoie le nombre d'albums réalisés par le groupe Muse présents dans la base de données.

  12. assert ordre_lex('', 'a') == True
    assert ordre_lex('b', 'a') == False
    assert ordre_lex('aaa', 'aaba') == True
    
  13. def ordre_lex(mot1, mot2):
        if mot1 == '':
            return True
        elif mot2 == '':
            return False
        else:
            c1 = mot1[0]
            c2 = mot2[0]
            if c1 < c2:
                return True
            elif c1 > c2:
                return False
            else:
                return ordre_lex(mot1[1:], mot2[1:])
    
  14. def ordre_lex2(mot1, mot2):
        for i in range(min(len(mot1), len(mot2))):
            if mot1[i] < mot2[i]:
                return True
            if mot1[i] > mot2[i]:
                return False
        return len(mot1) <= len(mot2)