如何有效地使用复杂 MySQL 数据库的视图以用于 CRUD?
How can I effectively use views for a complex MySQL database for use in a CRUD?
我正在构建一个 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)))
我走的路对吗?看来这样的观点会很快变得不合时宜。
是桌面、Web 还是任何平台?
您可以通过将基于关系的部分拼凑在一起来建模、显示和编辑关系数据。
但是,实际上每个部分都直接基于单个 table。您不会创建视图服务器端来将所有数据连接在一起。而且您也不使用 SQL。
如果你有一个客户,有 30 张发票,那么如果你加入 tables,那么客户将出现 30 次。一个数据行这样乱七八糟的编辑是不可能的。
所以这将是相关的 table:
因此,在访问的情况下,您将构建一个编辑主要客户的表单。这样的表单允许您一次编辑一个客户。建立一个表格——让它工作得很好。
同样,以上是基于 linked table.
现在,显示一位客户的发票?好的,现在建立一个新的表单(多项目表单)。并且您将此表格基于发票 table.
一旦你建立了两个表格?那么,在设计模式下打开您的主要客户表单,现在只需从中面板拖放发票表单即可。
所以,您最终会看到这样的屏幕:
你可以看到主窗体有客户名称、地址等内容
另一个表格(子表格)显示了您为这个客户准备的发票清单。
Access 的美妙之处在于它会为您连接主窗体和子窗体,而且无需代码。因此,您导航到的每个主要客户记录现在将在该子表单中显示子相关记录。您可以通过在子表单控件中设置 link 主子设置来完成此操作:
现在,当然,每张发票都会有一个“主要”发票部分。 (日期、客户,也许是账单地址)。对于每张发票,您将有一个子 table 发票详细信息。 (该一张发票中每件物品的数量、项目、价格金额等)。所以再次对这个invoice form和“invoice details”的子窗体重复上面的简单概念。
所以,在上面,当我点击一张发票时,我们只是打开一个主发票表单到一个发票记录,子发票明细再次显示为一个子表单。像这样:
那么,这是桌面开发,还是 Web 开发?
您创建一个用户界面的基础是将各个部分放入一个表单中,每个表单都基于一个 table。
因此,作为一般规则显示记录的每个部分都将基于单个 table。因此,您将永远不会使用连接在一起的视图或数据进行此类数据编辑。
并且对于 Access,您也不会使用任何 sql。
您用于编辑数据的每一位和每一部分都将直接基于访问中的一个 linked table 而不是某些视图。
因此,您不需要视图,甚至不需要 sql 构建每个部分。
因此,编辑关系数据的能力将取决于您如何拼凑每一部分,但这些部分中的每一个都不会基于某些 sql 查询,事实上也不是基于在一个视图上。您使用的每个部分都将直接基于 linked table,并且是单个 table。
您在此处使用的每个部分一次只能编辑一条记录。将最后一句话读 10 遍,以确保您掌握这个简单的规则。
因此,您当然可以发挥创意。所以,这是一个同时显示 3 个 table 的示例表单。在这个例子中,我们有一个事件,当时的人和他们为该事件捐款。我们需要将捐款分成不同的账户。有人可能会捐 50 美元,但 10 美元用于葬礼,另外 40 美元可能用于学校。
最上面是捐款活动(一条记录)。左侧是一个连续表格,显示向活动捐款的人及其金额。在右侧,我们显示了我们在左侧选择的单笔捐款的账户。每笔捐款都可以分成多个帐户。
这是一个常见的“经典”会计类型屏幕,您可以在其中输入给定金额,然后将其拆分并应用于多个帐户。
同样,上面的 Access 表单不是基于视图甚至 sql 查询,但我们放入表单的每个部分都是基于单个 linked table。
因此,将位和部分切片和切块放入表格中,允许并让您能够编辑相关数据,但每个部分仅基于单个 table你兴高采烈的数据模型。
正是您“如何”将这些点点滴滴拼凑在一起,才能实现编辑相关数据的魔力。因此,这个过程和您的想法与构建将相关数据连接在一起的视图几乎没有关系。在上面所有的例子中,我没有写任何sql或创建任何视图,每个部分只是直接基于linked table,甚至没有一些[=87] =].因此,您的相关数据模型是一个“指南”,它将为您提供有关 table 和下一步构建用户界面的信息。
我正在构建一个 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)))
我走的路对吗?看来这样的观点会很快变得不合时宜。
是桌面、Web 还是任何平台?
您可以通过将基于关系的部分拼凑在一起来建模、显示和编辑关系数据。
但是,实际上每个部分都直接基于单个 table。您不会创建视图服务器端来将所有数据连接在一起。而且您也不使用 SQL。
如果你有一个客户,有 30 张发票,那么如果你加入 tables,那么客户将出现 30 次。一个数据行这样乱七八糟的编辑是不可能的。
所以这将是相关的 table:
因此,在访问的情况下,您将构建一个编辑主要客户的表单。这样的表单允许您一次编辑一个客户。建立一个表格——让它工作得很好。
现在,显示一位客户的发票?好的,现在建立一个新的表单(多项目表单)。并且您将此表格基于发票 table.
一旦你建立了两个表格?那么,在设计模式下打开您的主要客户表单,现在只需从中面板拖放发票表单即可。
所以,您最终会看到这样的屏幕:
你可以看到主窗体有客户名称、地址等内容
另一个表格(子表格)显示了您为这个客户准备的发票清单。
Access 的美妙之处在于它会为您连接主窗体和子窗体,而且无需代码。因此,您导航到的每个主要客户记录现在将在该子表单中显示子相关记录。您可以通过在子表单控件中设置 link 主子设置来完成此操作:
现在,当然,每张发票都会有一个“主要”发票部分。 (日期、客户,也许是账单地址)。对于每张发票,您将有一个子 table 发票详细信息。 (该一张发票中每件物品的数量、项目、价格金额等)。所以再次对这个invoice form和“invoice details”的子窗体重复上面的简单概念。
所以,在上面,当我点击一张发票时,我们只是打开一个主发票表单到一个发票记录,子发票明细再次显示为一个子表单。像这样:
那么,这是桌面开发,还是 Web 开发?
您创建一个用户界面的基础是将各个部分放入一个表单中,每个表单都基于一个 table。
因此,作为一般规则显示记录的每个部分都将基于单个 table。因此,您将永远不会使用连接在一起的视图或数据进行此类数据编辑。
并且对于 Access,您也不会使用任何 sql。
您用于编辑数据的每一位和每一部分都将直接基于访问中的一个 linked table 而不是某些视图。
因此,您不需要视图,甚至不需要 sql 构建每个部分。
因此,编辑关系数据的能力将取决于您如何拼凑每一部分,但这些部分中的每一个都不会基于某些 sql 查询,事实上也不是基于在一个视图上。您使用的每个部分都将直接基于 linked table,并且是单个 table。
您在此处使用的每个部分一次只能编辑一条记录。将最后一句话读 10 遍,以确保您掌握这个简单的规则。
因此,您当然可以发挥创意。所以,这是一个同时显示 3 个 table 的示例表单。在这个例子中,我们有一个事件,当时的人和他们为该事件捐款。我们需要将捐款分成不同的账户。有人可能会捐 50 美元,但 10 美元用于葬礼,另外 40 美元可能用于学校。
最上面是捐款活动(一条记录)。左侧是一个连续表格,显示向活动捐款的人及其金额。在右侧,我们显示了我们在左侧选择的单笔捐款的账户。每笔捐款都可以分成多个帐户。
这是一个常见的“经典”会计类型屏幕,您可以在其中输入给定金额,然后将其拆分并应用于多个帐户。
同样,上面的 Access 表单不是基于视图甚至 sql 查询,但我们放入表单的每个部分都是基于单个 linked table。
因此,将位和部分切片和切块放入表格中,允许并让您能够编辑相关数据,但每个部分仅基于单个 table你兴高采烈的数据模型。
正是您“如何”将这些点点滴滴拼凑在一起,才能实现编辑相关数据的魔力。因此,这个过程和您的想法与构建将相关数据连接在一起的视图几乎没有关系。在上面所有的例子中,我没有写任何sql或创建任何视图,每个部分只是直接基于linked table,甚至没有一些[=87] =].因此,您的相关数据模型是一个“指南”,它将为您提供有关 table 和下一步构建用户界面的信息。