Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cần một số lời khuyên và phản hồi về việc viết mã mối quan hệ nhiều:nhiều trong MySQL

Một đứa trẻ có thể có không quá 2 cha mẹ, cả hai người đều có những vai trò cụ thể (mẹ so với cha) và có thể xảy ra trường hợp một hoặc cả hai cha mẹ đều không xác định được.

Vì vậy, đây không phải là mối quan hệ "nhiều với nhiều" thực sự, nó thực sự là "nhiều đến không hoặc một hoặc hai", có thể được biểu diễn tự nhiên như thế này (cả MotherIDFatherID là NULL-có thể):

Nếu bạn đặt LastName trong cả ParentPlayer (hoặc một lớp cha phổ biến trong trường hợp của bạn), điều này đương nhiên cũng bao gồm trường hợp cha mẹ có họ khác với con cái của họ.

Sau đó, bạn có thể dễ dàng nhận được "con trên mỗi phụ huynh" như thế này ( SQL Fiddle ) ...

SELECT
    ParentID,
    Parent.FirstName ParentFirstName,
    Parent.LastName ParentLastName,
    PlayerID,
    Player.FirstName PlayerFirstName,
    Player.LastName PlayerLastName
FROM
    Parent
    LEFT JOIN Player
        ON Parent.ParentID = Player.MotherID
        OR Parent.ParentID = Player.FatherID
ORDER BY ParentId

... và xoay vòng dữ liệu trong mã ứng dụng của bạn nếu đó là điều bạn muốn.

Mô hình trên cho phép không khớp giữa Parent giới tính và vai trò của mẹ / cha. Nếu bạn muốn ngăn chặn điều này, bạn có thể đi quá đà và làm điều gì đó như thế này ...

... nhưng tôi không muốn làm phức tạp và gắn bó với mô hình đầu tiên và thực thi mô hình này ở cấp ứng dụng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CakePHP 3 - Phân tích cú pháp ngày với LocalStringFormat để sửa định dạng SQL và xác thực chính xác

  2. Cách mã hóa lưu lượng truy cập cơ sở dữ liệu đám mây kết hợp

  3. Lỗi cài đặt mysql-python:Không thể mở tệp bao gồm 'config-win.h'

  4. Sử dụng 'khác biệt' trong truy vấn MySQL

  5. Doctrine2 trong Symfony2:Làm cách nào để biết đối tượng gọi nào dẫn đến một truy vấn?