Bir kullanıcının geçerli bir adres olmadan bir sipariş verebilmesini beklememden dolayı, ayrı FK'yi kullanıcı tablosuna kaldırmayı ve birleştirilmiş kullanıcı id - adresi kimliği alanlarını yabancı anahtar olarak adres tablosu.
CREATE TABLE orders AS (
--[COLUMN DEFINITIONS]
address_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
CONSTRAINT fk_usr_addr FOREIGN KEY (user_id, address_id)
REFERENCES address(user_id, id)
) ENGINE=InnoDB;
bir emir eksik ve henüz bir adres yoksa, o zaman bu using foreign keys mysql belgelerine göre beri, bir çok sütun yabancı anahtar için bir sorun olmamalı:
MAÇ SQL standardında fıkra, bir bir birincil anahtarla karşılaştırıldığında, bir kompozit (çok sütunlu) yabancı anahtardaki NULL değerlerinin nasıl ele alınacağını denetler. MySQL, yabancı anahtarın tamamen veya kısmen NULL olmasına izin veren MATCH BASİT tarafından tanımlanan semantikleri esas olarak uygular. Bu durumda, yabancı bir anahtar içeren (alt tablo) satırı, eklenmesine izin verilir ve başvurulan (ana) tablosundaki herhangi bir satırla eşleşmiyor. tetikleyicileri kullanarak diğer semantikleri uygulamak mümkündür.
Bir kullanıcı birden fazla adres ekleyebilir? –
@Sougata, yup, sadece bir exmaple! ama işyerinize veya evinize sipariş verebileceğinizi düşünelim. – azerafati
Karmaşık 'iş mantığı', kullanıcı ve veritabanı arasındaki kod katmanında kodlanmalıdır. –