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)的目的。這樣你可以在之後輕鬆加載它們。