您有一个数据库的图像,其中表格属于每种类型的表格。
我的意思是,如果你有一个类型" 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脚本并将其发送到数据库)
提前致谢,对不起我的英语。
答案 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)