これは私の最初の投稿であり、どこにも答えが見つからないようです....
複数の会社を持つデータベースがあり、各会社には複数の場所があります。連絡先を定義しようとして問題が発生しています。一部の連絡先は、グローバルで、どの場所でも利用できる必要があります....一部の連絡先は、1 つの場所にのみ存在する必要があります。以下の contact_info テーブルでは、連絡先 (会社または場所) の可視性を指定します。ただし、場所は主要な連絡先を選択する必要があります。これにより、連絡先 -> 場所および場所 -> 連絡先からの FK が残ります。
関連する別のテーブルがあることは知っていますが、それを概念化できないようです。
CREATE TABLE `company_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`));
CREATE TABLE `location_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`company_info` INT NOT NULL DEFAULT -1,
`name` VARCHAR(100) NOT NULL DEFAULT '',
`primary_contact_id` INT NOT NULL DEFAULT -1,
PRIMARY KEY(`id`),
UNIQUE KEY(`company_id`,`name`),
FOREIGN KEY (company_id) REFERENCES company_info(id)
FOREIGN KEY (primary_contact_id) REFERENCES contact_info(id));
CREATE TABLE `contact_info` (
`id` INT NOT NULL AUTO_INCREMENT,
`company_id` INT
`location_id` INT,
`type` ENUM('Company','Location') NOT NULL DEFAULT 'Company',
`first_name` VARCHAR(50) NOT NULL DEFAULT '',
`last_name` VARCHAR(50) NOT NULL DEFAULT '',
PRIMARY KEY(`id`),
UNIQUE KEY(`id`,`company_id`,`location_id`),
FOREIGN KEY (location_id) REFERENCES location_info(id),
FOREIGN KEY (company_id) REFERENCES company_info(id)