2010-01-06 136 views
0

我遇到了我的第一个mysql的INSERT测试和我使用这些表:在关系表上使用INSERT有哪些更好的方法?

table employees 
-> employee_id 
-> employee_name 
-> employee_surname 
-> employee_url 

table areas 
-> area_id 
-> area_city 
-> area_address 
-> area_country 

table agencies 
-> agency_id 
-> agency_name 
-> agency_url 

table node_employees 
-> node_id 
-> employee_id 
-> area_id 
-> agency_id 
table_employeetable_areastable_agency

我将存储的数据,但我不会强迫同时保存所有数据,这样我就可以创建一个员工,然后创建一个代理或地址。

在一个单数据插入的情况下,我应该使用这样的东西还是应该直接使用表node_employees,如果是的话,我该怎么办呢?

INSERT INTO employees (employee_name, employee_surname, employee_url) 
VALUES ('Roger', 'Waters', 'http://pinkfloyd.com') 

INSERT INTO agencies (agency_name, agency_url) 
VALUES ('Google', 'http://google.com') 

INSERT INTO areas (area_city, area_address, area_country) 
VALUES ('Rome', 'Via Roma, 123', 'Italy') 

要连结行相互我创建node_employees,关系表。 我使用它将员工与区域或代理机构连接起来,那么我应该如何将数据与此关系表链接?

SELECT employee_id FROM employees WHERE employee_name = 'Roger' 
SELECT agency_id FROM agencies WHERE agency_name = 'Google' 

// I'll get their ids in php 
$php_employee_id 
$php_agency_id 

// and then 
INSERT INTO node_employees (employee_id, agency_id) 
VALUES ('$php_employee_id', '$php_agency_id') 

我还有另一个疑问,如果我需要将员工与区域联系起来,我该怎么办?我应该使用不同的查询,以便查询每种可能性?

// so, not this 
$php_employee_id = 12; 
$php_agency_id = 7; 
$php_area_id = null; 
INSERT INTO node_employees (employee_id, agency_id, area_id) 
VALUES ('$php_employee_id', '$php_agency_id', '$php_area_id') // will this remove the previous data with null in area_id? 

回答

0

要连结行相互我创建node_employees,关系表。我使用它来将员工与某个区域或某个机构联系起来,那么我该怎么做才能将数据与此关系表链接?

这应该是两个表格 - 一个用于将员工与机构相关联,另一个用于将员工与区域相关联。您还没有提到有关机构方面,给人的印象,他们是相互独立的东西......

无论如何,node_employees.employee_id应该是一个外键EMPLOYEES.employee_id,以确保该雇员必须已经存在的系统中有效的值。和agencies表之间的agency_id同样如此。

由于这些关系,价值观都在EMPLOYEESAGENCIES之前他们在NODE_EMPLOYEES表中存在存在。这使得NODE_EMPLOYEES表与另外两个表处于“子”关系,因此,您的三条INSERT语句必须在孩子面前插入父母,并使用孩子父母的值。

1

我假设机构和地区是一对多的关系。换句话说,每个员工都可以分配到多个机构和地区。如果没有,那么我只需将agency_id和area_id字段添加到employees表中,甚至不创建node_employees表。

考虑到上述...

从您提供它出现机构和地区relativally静态的描述。所以他们应该在员工数据输入之前进行设置。

然后,当插入雇员使用mysql_insert_id()返回您刚刚创建的记录的ID。 (我假设的雇员标识是一个自动增量字段)

然后正如你所说

SELECT agency_id FROM agencies WHERE agency_name = 'Google' 

// I'll get their ids in php 
$php_employee_id <== from mysql_insert_id() after inserting employee record 
$php_agency_id <== from above agency Select 

// and then 
INSERT INTO node_employees (employee_id, agency_id) 
VALUES ('$php_employee_id', '$php_agency_id') 

您的最后一个查询

一个INSERT语句添加一个新的记录也不会取代现有的做记录。如果现有记录具有唯一索引,如'employee_id',则它将失败并显示错误。您需要使用UPDATE来执行该操作,或者REPLACE语句会更新记录(如果存在)或者INSERT(如果记录不存在)。确保你阅读它,因为它通过独特的索引工作。

DC

相关问题