Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Beberapa kunci asing yang saling eksklusif - apakah ini cara yang harus dilakukan?

Jika kita melihat model di sini, kita akan melihat yang berikut:

  1. Seorang pengguna terkait dengan tepat satu situs web
    • Perusahaan terkait dengan tepat satu situs web
    • Situs web terkait dengan tepat satu pengguna atau perusahaan

Relasi ketiga menyiratkan keberadaan entitas "pengguna atau perusahaan" yang PRIMARY KEY harus disimpan di suatu tempat.

Untuk menyimpannya, Anda perlu membuat tabel yang akan menyimpan PRIMARY KEY dari website owner kesatuan. Tabel ini juga dapat menyimpan atribut umum untuk pengguna dan situs web.

Karena merupakan relasi satu-ke-satu, atribut situs web juga dapat disimpan dalam tabel ini.

Atribut yang tidak dibagikan oleh pengguna dan perusahaan harus disimpan dalam tabel terpisah.

Untuk memaksa hubungan yang benar, Anda perlu membuat PRIMARY KEY dari website komposit dengan owner type sebagai bagian dari itu, dan paksa jenis yang benar di tabel anak dengan CHECK kendala:

CREATE TABLE website_owner (
    type INT NOT NULL,
    id INT NOT NULL,
    website_attributes,
    common_attributes,
    CHECK (type IN (1, 2)) -- 1 for user, 2 for company
    PRIMARY KEY (type, id)
)

CREATE TABLE user (
    type INT NOT NULL,
    id INT NOT NULL PRIMARY KEY,
    user_attributes,
    CHECK (type = 1),
    FOREIGN KEY (type, id) REFERENCES website_owner
)

CREATE TABLE company (
    type INT NOT NULL,
    id INT NOT NULL PRIMARY KEY,
    company_attributes,
    CHECK (type = 2),
    FOREIGN KEY (type, id) REFERENCES website_owner
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan bidang dengan nama dalam kueri Python?

  2. Secara otomatis klip string dengan panjang yang tepat pada sisipan

  3. Perbarui CodeIgniter Kesalahan Bidang Basis Data

  4. Apa perbedaan antara tipe data BLOB dan TEXT di MySQL?

  5. Bagaimana saya bisa melihat berapa banyak koneksi MySQL yang terbuka?