有3种情况:
-
1 到 0-1 关系(伪一对一)
-
1 到 * 关系(一对多)
-
* 到 * 关系(多对多)
现在您应该决定选择哪一个。
如果一名员工可以有多个地址,您可以使用选项 2。
如果一个员工可以有多个地址,而一个地址可以有多个员工(从您的数据来看,这听起来可能是因为 2 名员工可以住在同一条街上的同一个城镇),那么您应该坚持选项 3。
如果以上都不是,那么请选择选项 1。
现在是这些选项的技术部分:
1)
create table Employees(employee_id int, --will be PK
first_name varchar(50)
last_name varchar(50)
....)
create table EmployeeAddresses(employee_id int, --will be PK and FK on Employees.employee_id
town varchar(50)
street varchar(50)
....)
2)
如果一名员工可以有多个地址:
create table Employees(employee_id int, --will be PK
first_name varchar(50)
last_name varchar(50)
....)
create table EmployeeAddresses(address_id int, --will be PK
employee_id int, --will be FK on Employees.employee_id
town varchar(50)
street varchar(50)
....)
如果一个地址可以有多名员工:
create table Employees(employee_id int, --will be PK
address_id int, --will be PK and FK on Addresses.address_id
first_name varchar(50)
last_name varchar(50)
....)
create table Addresses(address_id int, --will be PK
town varchar(50)
street varchar(50)
....)
3)
create table Employees(employee_id int, --will be PK
first_name varchar(50)
last_name varchar(50)
....)
create table Addresses(address_id int, --will be PK
town varchar(50)
street varchar(50)
....)
create table EmployeeAddresses(employee_id int, --will be PK and FK on Employees.employee_id
address_id int, --will be PK and FK on Addresses.address_id)