SQL:在异构表上创建视图

时间:2014-10-19 10:00:25

标签: sql sql-server

您有一个数据库的图像,其中表格属于每种类型的表格。

我的意思是,如果你有一个类型" Person"用" ipotetic"行姓名,姓,电话和地址;这将涉及一定数量的表格(例如3),如下所示:

Person_1

 Name      Surname
 =================
 Jhon      Doe
 Jhon      Smith

Person_2

 Name      Surname      Phone
 =============================
 Alan      Ford         555 2536

Person_3

 Name      Surname      Phone      Address
 =========================================
 Marty     McFly        555 2434   something

我将获得的是包含所有先前记录的单一视图

View

 Name      Surname      Phone      Address
 =========================================
 Marty     McFly        555 2434   something
 Jhon      Doe
 Alan      Ford         555 2536
 Jhon      Smith
 Alan      Ford         555 2536

这可能吗?

我的问题还在于Person表上没有保证(所以明天用户可以添加另一行的新Person_4)。

检查每个Persons表结构并使用所有列的总和(通过我的程序以编程方式)声明适当的视图没有问题,但我不知道将每个表行打包到该视图中的语法。

(我不会使用存储过程,每个操作都由我的程序完成,需要编写正确的sql脚本并将其发送到数据库)

提前致谢,对不起我的英语。

1 个答案:

答案 0 :(得分:2)

目前,您的数据库设计存在缺陷。我之所以这么说,是因为每个新数据都有一个新表。 数据应组织成表格,每个新数据应构成该表格中的一行。

您说要创建的视图实际上是您的persons表格的样子。

我建议您首先查看要存储的数据,然后创建一个反映该数据的表。例如,在您的示例中,您将查看四个数据: 姓名,姓,电话和地址。

让我们把这一切都放在一个表中:

| Person_ID   | First_Name | Last_Name | Phone_Number | Address |

您会注意到,我还添加了一个“ID”列。 ID列用于跨表的Join个数据块。它们为表中的每一行提供一个标识,然后您可以使用该标识对应另一个相关数据表中的另一列。我不会进入联接,因为这不在你的问题中,但你可以找到更多关于他们here的信息。

让我们编写一个脚本来创建这样一个表:

CREATE TABLE PERSONS 
(
   [PERSON_ID] INT IDENTITY(1,1), 
   [First_Name] varchar (20),
   [Last_Name] varchar(20),
   [Phone_Number] int,
   [Address] varchar (100)
)

现在我们有了一个表,我们需要添加数据。

我们需要在已有的表中添加另一行,而不是创建新表。 您可以使用“Insert”关键字来完成此操作。

示例脚本如下:

INSERT INTO PERSONS ([First_Name], [Last_Name], [Phone_Number], [Address])
VALUES ('Kid', 'Code', 0123456789, '123 False Street, Springfield'),
       ('Mike', 'Myers', 0123456789, '124 False Street, Springfield')

然后,如果你运行SELECT * FROM Persons,你应该得到:(唯一不同的是,你的身份证明迈克将是2)

Select Results