我需要在SQL server中创建嵌套表。任何人可以指导我如何创建它们。为了给出一个背景,我正在尝试将RDBMS从oracle迁移到SQL server。
表的结构如下。我有一个表'Employees‘,其中一个列是address。我还有一张桌子,上面有“街道”、“城镇”、“区”、“州”等列。当我查询表'Employees‘时,我应该在address列中看到address表中所有列的属性名称和值。
Employees:分栏: ID,FirstName,LastName,部门,性别,道布,地址
地址(嵌套表):包含列:街道、城镇、区域、州
这是在oracle中使用嵌套表和用户定义的数据类型完成的。有没有人能建议我在SQL server中有什么替代方案?如何在SQL server中实现此要求。
发布于 2015-06-05 15:12:40
有3种情况:
1到one)1的关系(伪一到many)*到0-1的关系(一到*到*的关系(多对多)现在,您应该决定选择哪一个。
如果一个员工可以有多个地址,您可以使用选项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)发布于 2015-06-05 14:36:46
我认为最好的解决方案是,当你为地址创建一个单独的表,并链接到员工。例如:
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发布于 2015-06-05 14:34:40
在SQL Server Analysis Services中,必须将数据作为案例表中包含的一系列案例提供给数据挖掘算法。然而,并不是所有的情况都可以用一行数据来描述。例如,一个案例可能派生自两个表:一个表包含客户信息,另一个表包含客户采购。客户信息表中的单个客户在客户采购表中可能有多个项目,这使得使用单行来描述数据变得困难。Analysis Services通过使用嵌套表提供了一种独特的方法来处理这些情况。
为了创建嵌套表,两个源表必须包含已定义的关系,以便一个表中的项可以与另一个表相关。在SQL Server数据工具(SSDT)中,可以在数据源视图中定义此关系。有关如何定义两个表之间关系的详细信息,请参阅如何使用数据源视图设计器(Analysis Services)添加、删除、查看或修改逻辑关系。
https://technet.microsoft.com/en-us/library/ms174835(v=sql.110).aspx
https://stackoverflow.com/questions/30659630
复制相似问题