我如何有效地使用用于MySQL的复杂MySQL数据库的视图?

问题描述 投票:0回答:1

我正在构建一个MySQL数据库,最终目的是在Microsoft Access中创建GUI CRUD前端。上图中是此数据库的“联系人”部分的布局。 [Current table relationships]

理想情况下,此屏幕快照中的所有表格(禁止付款)都将以一种Access形式填充,但是我很难找到一种方法来实现这一目标。最明显的答案(用我有限的SQL知识)是创建一个连接所有这些表的大型视图,然后让Access窗体调用存储过程(一个大型SP,还是每个字段一个?)。对视图进行C / R / U / D。

我测试过用下面的几个表创建视图(一个多对多关系和一个一对多):

CREATE 
ALGORITHM = UNDEFINED 
DEFINER = lauren3@% 
SQL SECURITY DEFINER
VIEW peopleformview AS
SELECT 
    p.PersonID AS personid,
    p.Title AS title,
    p.FirstName AS firstname,
    p.LastName AS lastname,
    p.Role AS role,
    p.DOB AS dob,
    p.PassportNum AS passportnum,
    p.Alumni AS alumni,
    p.Degree AS degree,
    p.Nickname AS nickname,
    p.Email AS email,
    p.PermissiontoEmail AS permissiontoemail,
    ar.agent AS agent,
    a.AddressID AS AddressID,
    a.Address1 AS Address1,
    a.Address2 AS Address2,
    a.City AS City,
    a.State_Province AS State_Province,
    a.PostCode AS PostCode,
    a.Country AS Country
FROM
    (((people p
    LEFT JOIN agentref ar ON ((p.agentref_agentid = ar.agentid)))
    LEFT JOIN people_has_addresses pha ON ((pha.people_PersonID = p.PersonID)))
    LEFT JOIN addresses a ON ((pha.addresses_AddressID = a.AddressID)))

我在这里正确吗?看来这样的观点很快就会变得异常强大。

mysql ms-access stored-procedures view crud
1个回答
0
投票

是台式机,网络还是几乎任何平台?

您可以通过将基于关系的零件拼凑在一起来建模,显示和编辑关系数据。

但是,实际上每个部分都直接基于一个表。您无需创建将所有这些数据结合在一起的视图服务器端。而且您也不使用SQL。

如果您有一个客户,并且有30张发票,那么如果您加入表格,则该客户将出现30次。您无法将一个数据行编辑成一团糟。

所以这是相关表:enter image description here

因此,在访问的情况下,您将建立一个用于编辑主要客户的表单。这样的表格使您可以一次编辑一个客户。建立一种形式–使其工作正常。

enter image description here同样,以上内容基于一个链接表。

现在,要显示一位客户的发票?好的,现在构建一个新表单(多个项目表单)。然后您将此表格基于发票表。

enter image description here

一旦建立了两种形式?好了,在设计模式下打开您的主要客户表单,现在只需从中殿窗格中拖放发票表单即可。

所以,您看到的是这样的屏幕:

enter image description here

您可以看到主表单中包含客户名称,地址等内容。>>

以及另一种形式(子形式)显示了您为此客户拥有的发票清单。

Access的优点在于它将为您连接主窗体和子窗体,而无需编写代码。因此,您导航到的每个主要客户记录现在都将以该子表单显示与子级相关的记录。您可以通过在子表单控件中设置链接主和子设置来做到这一点:

enter image description here

现在,每个发票当然都有一个“主要”发票部分。 (日期,客户或帐单地址)。对于每张发票,您将有一个发票明细的子表。 (一张发票中每件物品的数量,项目,价格等)。因此,再次针对此发票表单和“发票明细”的子表单重复上述简单概念。

因此,在上面,当我单击发票时,我们只需要打开一个发票记录的主发票表单,子发票详细信息将再次显示为子表单。像这样:

enter image description here

那么,这是桌面开发,还是Web开发?

您创建一个用户界面,方法是将各个部分放到一个基于单个表的表单中。

因此,将记录作为一般规则显示的每个部分都将基于一个SINGLE表。因此,您进行此类数据编辑的结果将永远不会使用视图或连接在一起的数据进行编辑。

并且使用Access也不会使用任何SQL。

您用于编辑数据的每一部分将直接基于访问中的一个链接表,而不是某些视图。

因此,您不需要视图,甚至不需要为每个构建的零件使用sql。

因此,编辑关系数据的能力将取决于您如何将每一位和每一部分拼凑在一起,但是这些部分中的每一个都不会基于某些sql查询,实际上也不是基于视图。您使用的每个部分都将直接基于链接表,并在此基础上创建一个表。

您在这里使用的每个部分只能一次编辑一个记录。阅读最后一句话10次,以确保您掌握此简单规则。

因此,您当然可以发挥创造力。因此,这是一个示例表格,可同时显示3个表。在此示例中,我们有一个事件,然后是一个人及其为该事件的捐赠。我们需要将捐款分成不同的帐户。有人可能会给50美元,但10美元是葬礼的费用,另外40美元可能是学校的费用。

enter image description here

顶部是捐赠事件(一条记录)。左侧是一个连续表格,其中显示了该活动的捐款人及其捐款额。在右侧,我们显示了在左侧选择的单笔捐款的帐户。每个捐赠可以分为多个帐户。

这是一个常见的“经典”会计类型屏幕,您可以在其中输入给定金额,但将其拆分并应用于多个帐户。

同样,上面的Access表单也不基于视图甚至sql查询,但是我们放入表单中的每个部分都基于单个链接表。

因此,您将位和部分的切片和切块放入表格中,从而允许并允许您编辑相关数据,但每个部分仅基于您高兴的数据模型中的单个表。

正是“如何”将这些位和部分拼凑在一起,使编辑相关数据变得神奇。因此,此过程和您的思考与构建将相关数据组合在一起的视图几乎没有任何关系。在以上所有示例中,我都没有编写任何SQL或创建任何视图,并且每个部分都直接基于链接表,甚至不基于某些sql。因此,您相关的数据模型是一个“指南”,它将为您提供有关在构建用户界面时接下来要使用的表和部件的信息。

© www.soinside.com 2019 - 2024. All rights reserved.