多态关联或更简单的事情

时间:2013-04-22 06:22:42

标签: php mysql foreign-key-relationship polymorphic-associations

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

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

1 个答案:

答案 0 :(得分:0)

最有效的方法是拆分它,以便为您的公司提供一个表格,与您的用户建立一个表格,以及一个仅用于存储所有连接的表格(即EntryID, UserID, CompanyID)。通过这种方式,您可以在以后轻松加载它们。