Python でデータベースを操作する場合、テーブル間の関係を理解することが重要です。最も一般的な関係は、1 対多と多対多の 2 つです。 WNBA の例を使用して、これらの関係が何であるか、SQLite でどのように機能するか、Python を使用して実装する方法を調べてみましょう。
1 対多の関係とは、テーブル内の 1 つのレコードが別のテーブル内の複数のレコードに関連付けられていることを意味します。たとえば、チームとアスリートのデータベースでは次のようになります。
多対多の関係は、1 つのテーブル内の複数のレコードが別のテーブル内の複数のレコードに関連付けられている場合に発生します。たとえば、アスリートとスポンサー契約のデータベースでは次のようになります。
SQLite で多対多のリレーションシップを実装するには、2 つのメイン テーブルをリンクするジャンクション テーブル (ブリッジまたはアソシエーション テーブルとも呼ばれる) が必要です。
まず、これらの関係を示すデータベースを作成しましょう。
import sqlite3
conn = sqlite3.connect("sports.db") cursor = conn.cursor()
cursor.execute(""" CREATE TABLE IF NOT EXISTS Team ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS Athlete ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, team_id INTEGER, FOREIGN KEY (team_id) REFERENCES Team (id) ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS Brand ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS Deal ( id INTEGER PRIMARY KEY, athlete_id INTEGER, brand_id INTEGER, FOREIGN KEY (athlete_id) REFERENCES Athlete (id), FOREIGN KEY (brand_id) REFERENCES Brand (id) ) """) conn.commit()
データを追加して、チームとアスリート間の 1 対多の関係を示しましょう。
cursor.execute("INSERT INTO Team (name) VALUES (?)", ("New York Liberty",)) team_id = cursor.lastrowid cursor.execute("INSERT INTO Athlete (name, team_id) VALUES (?, ?)", ("Breanna Stewart", team_id)) cursor.execute("INSERT INTO Athlete (name, team_id) VALUES (?, ?)", ("Sabrina Ionescu", team_id)) conn.commit()
cursor.execute("SELECT name FROM Athlete WHERE team_id = ?", (team_id,)) athletes = cursor.fetchall() print("Athletes on the team:", athletes)
次に、Deal テーブルを使用して、アスリートとブランド間の多対多の関係を示すデータを追加しましょう。
cursor.execute("INSERT INTO Brand (name) VALUES (?)", ("Nike",)) brand_id_nike = cursor.lastrowid cursor.execute("INSERT INTO Brand (name) VALUES (?)", ("Adidas",)) brand_id_adidas = cursor.lastrowid
cursor.execute("INSERT INTO Deal (athlete_id, brand_id) VALUES (?, ?)", (1, brand_id_nike)) cursor.execute("INSERT INTO Deal (athlete_id, brand_id) VALUES (?, ?)", (1, brand_id_adidas)) cursor.execute("INSERT INTO Deal (athlete_id, brand_id) VALUES (?, ?)", (2, brand_id_nike)) conn.commit()
cursor.execute(""" SELECT Brand.name FROM Brand JOIN Deal ON Brand.id = Deal.brand_id WHERE Deal.athlete_id = ? """, (1,)) brands = cursor.fetchall() print("Brands for Athlete 1:", brands)
SQLite で外部キーとの関係を定義し、Python を使用してデータを管理することにより、テーブル間の明確な接続を持つ堅牢なデータベースを作成できます。データを効果的に構造化するには、1 対多および多対多の関係を理解することが不可欠です。
この単純な例は表面をなぞったものですが、より複雑な関係を処理するために拡張することができます。
以上がPython と SQLite における 1 対多および多対多の関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。