我需要在SQL Server中创建嵌套表。任何人都可以指导我如何创建它们。为了给出背景,我试图将RDBMS从oracle移动到SQL服务器。
表的结构如下。我将表'Employees'与地址作为列之一。我还有一个桌子,街道,镇,区,州。当我查询表'Employees'时,我应该在地址列的地址表中看到所有列的属性名称和值。
雇员: 列:ID,FirstName,LastName,dept,gender,dob,address
地址(嵌套表): 列:街道,镇,区,州
这是在oracle中使用嵌套表和用户定义的数据类型完成的。任何人都可以建议我在SQL服务器中替代这个。我如何在SQL服务器中实现此要求。
答案 0 :(得分:2)
我认为最好的解决方案是,当您为地址创建单独的表并链接到Employees时。 例如:
create table [Employee]
(ID int not null
, FirstName varchar(100) not null
, LastName varchar(100) not null
--...
)
go
create table [Address]
(ID int IDENTITY(1,1) not null
, EmployeeID int not null
, Street varchar(200)
, Town varchar(200)
--...
)
go
ALTER TABLE [Address] WITH CHECK ADD CONSTRAINT [FK_Address_Employe] FOREIGN KEY(EmployeeID)
REFERENCES [Employee] ([ID])
go
答案 1 :(得分:1)
有3例:
1
与0-1
关系(伪一对一)1
至*
关系(一对多)*
至*
关系(多对多)现在您应该决定选择哪一个。
如果一名员工可以拥有多个地址,您可以使用选项2.
如果一个员工可以有多个地址,一个地址可以有多个员工(从您的数据中听起来可能是因为2个员工可以住在同一条街上的同一个城镇),那么您应该坚持选项3。 / p>
如果以上两种情况均不正确,则只需选择选项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)
答案 2 :(得分:0)
在SQL Server Analysis Services中,必须将数据作为案例表中包含的一系列案例提供给数据挖掘算法。但是,并非所有情况都可以通过单行数据来描述。例如,案例可能来自两个表:一个表包含客户信息,另一个表包含客户购买。客户信息表中的单个客户可能在客户购买表中有多个项目,这使得难以通过使用单行来描述数据。 Analysis Services通过使用嵌套表提供了一种处理这些情况的独特方法。
为了创建嵌套表,两个源表必须包含已定义的关系,以便一个表中的项可以与另一个表相关。在SQL Server数据工具(SSDT)中,您可以在数据源视图中定义此关系。有关如何定义两个表之间关系的更多信息,请参见如何: 使用数据源视图设计器(Analysis Services)添加,删除,查看或修改逻辑关系。
https://technet.microsoft.com/en-us/library/ms174835(v=sql.110).aspx