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) 
+0

你说有些联系人存在于多个地点,有些联系人存在于一个地点。 这是否取决于联系人是哪些公司的一部分? 例如如果一个公司有几个位置,那么该公司雇用的所有联系人都有相同的位置。如果公司有一个位置,那么联系人将拥有一个位置。 – antony 2013-04-22 07:11:48

+0

公司“Ajax”联系了“Mike”,他应该是“纽约”,“洛杉矶”和“迈阿密”地点的主要联系人......他们有一个联系人“Joe”,他只会出现在“New约克“......在contact_info表中,Mike将有company_id = ajax,location_id NULL,而Joe将有一个company_id NULL和location_id = New York ....当我的意思是”出现“时,有一种形式可以选择主要联系人为位置 – 2013-04-22 14:32:57

回答

0

最有效的方式将拆分它,以便有对你公司的表格,与用户的表,表中仅用于存储所有连接(即EntryID, UserID, CompanyID)的目的。这样你可以在之后轻松加载它们。