Jika kita melihat model di sini, kita akan melihat yang berikut:
- 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
)