効率的なデータ管理のためのデータベース関係のマスター
効果的なデータベース設計は、テーブルを適切に構造化し、テーブル間の関係を定義するかどうかにかかっています。 レコードの接続方法は、1 対 1、1 対多、多対多の 3 つの基本的な関係タイプによって決まります。 それぞれのタイプとその実装を見てみましょう。
1 対 1 の関係
1 対 1 の関係は、2 つのテーブル内のレコード間の 1 対 1 の対応関係を意味します。 これは、親テーブルの主キーを参照する依存テーブルの外部キーを使用して実現されます。
例:
<code class="language-sql">-- Table 1: Student CREATE TABLE Student ( student_id INT PRIMARY KEY, first_name VARCHAR(255), last_name VARCHAR(255), address_id INT ); -- Table 2: Address CREATE TABLE Address ( address_id INT PRIMARY KEY, address VARCHAR(255), city VARCHAR(255), zipcode VARCHAR(10), student_id INT UNIQUE );</code>
各 student_id
は address_id
に一意にマッピングされ、1 対 1 のリンクを示します。 UNIQUE
テーブルの student_id
に対する Address
制約に注目してください。
1 対多の関係
1 対多の関係では、1 つのテーブル内の 1 つのレコードが別のテーブルの複数のレコードに関連付けられます。 依存テーブルは、親テーブルの主キーを参照する外部キーを使用します。
例:
<code class="language-sql">-- Table 1: Teacher CREATE TABLE Teacher ( teacher_id INT PRIMARY KEY, first_name VARCHAR(255), last_name VARCHAR(255) ); -- Table 2: Class CREATE TABLE Class ( class_id INT PRIMARY KEY, class_name VARCHAR(255), teacher_id INT );</code>
1 人の教師が複数のクラスを教えることができますが、各クラスの教師は 1 人だけです。
多対多の関係
多対多の関係は、1 つのテーブルの複数のレコードを別のテーブルの複数のレコードに接続します。これには、両方のテーブルの外部キーを含むジャンクション テーブルが必要です。
例:
<code class="language-sql">-- Table 1: Student CREATE TABLE Student ( student_id INT PRIMARY KEY, first_name VARCHAR(255), last_name VARCHAR(255) ); -- Table 2: Class CREATE TABLE Class ( class_id INT PRIMARY KEY, name VARCHAR(255) ); -- Junction Table: Student_Class CREATE TABLE Student_Class ( class_id INT, student_id INT, PRIMARY KEY (class_id, student_id) );</code>
Student_Class
テーブルでは、複数のクラスに複数の生徒が参加できます。
データの整合性: 1 対 1 および 1 対多の関係で外部キーに UNIQUE
制約を適用することは、データの整合性を維持するために重要です。
クエリの例:
<code class="language-sql">-- Students in a specific class: SELECT s.student_id, s.last_name FROM Student_Class sc JOIN Student s ON s.student_id = sc.student_id WHERE sc.class_id = 1; -- Classes attended by a specific student: SELECT c.class_id, c.name FROM Student_Class sc JOIN Class c ON c.class_id = sc.class_id WHERE sc.student_id = 2;</code>
以上が1 対 1、1 対多、および多対多のデータベース関係はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。