0

这是我的第一篇文章,我似乎无法在任何地方找到答案......

我有一个包含多家公司的数据库,每家公司都有多个地点。我在尝试定义联系人时遇到了问题。一些联系人需要是全球性的并且在任何位置都可用....一些联系人只需要存在于一个位置。在下面的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)
4

1 回答 1

0

最有效的方法是将其拆分,以便为您的公司提供一个表格,为您的用户提供一个表格,以及一个仅用于存储所有连接(即EntryID, UserID, CompanyID)的表格。这样您以后就可以轻松地加载它们。

于 2013-04-22T06:27:57.417 回答