Mysql
 sql >> база данни >  >> RDS >> Mysql

Множество, но взаимно изключващи се външни ключове - това ли е пътят?

Ако разгледаме модела тук, ще видим следното:

  1. Потребител е свързан точно с един уебсайт
    • Една компания е свързана с точно един уебсайт
    • Един уебсайт е свързан точно с един потребител или компания

Третата връзка предполага съществуване на обект "потребител или компания", чийто PRIMARY KEY трябва да се съхранява някъде.

За да го съхраните, трябва да създадете таблица, която да съхранява PRIMARY KEY на website owner субект. Тази таблица може също да съхранява атрибути, общи за потребител и уебсайт.

Тъй като това е връзка едно към едно, атрибутите на уебсайта могат да се съхраняват и в тази таблица.

Атрибутите, които не се споделят от потребители и компании, трябва да се съхраняват в отделна таблица.

За да наложите правилните връзки, трябва да направите PRIMARY KEY на website съставен с owner type като част от него и принуди правилния тип в дъщерните таблици с CHECK ограничение:

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. Как безопасно и ефективно да получите идентификатора на реда след вмъкване с mysql, използвайки MySQLdb в python?

  2. Как да получите размера на mysql базата данни?

  3. Как да добавяте нови редове в jTable от база данни, докато щракнете върху бутона, без да изчиствате съществуващите редове

  4. Разлика между LIKE и =в MYSQL?

  5. org.hibernate.HibernateException:Базата данни не върна собствено генерирана стойност на идентичност