【发布时间】:2021-10-19 12:19:45
【问题描述】:
目前我正在设计一个客户管理系统,其中包括客户的公司信息及其联系人。
我的设计在下面的照片中。
https://i.stack.imgur.com/FecUU.png
在这张照片中,您可以看到 客户 ID、公司名称、地址行、公司电话、传真、支付条款和一组联系人、电话、电子邮件的Label 和 TextBox .
在我过去的设计中,我创建了一个表来存储所有数据,并将组命名为多个列contact_1, tel_1, email_1, contact_2, ... email_8。这种设计让我可以轻松查询数据,但在数据绑定方面不好。所以我觉得我应该为此做一个新的设计。
我的新设计是将联系人、电话、电子邮件组分开到另一个表中。这样该列表将保留客户 ID、公司名称、地址行、公司电话、传真和支付条款。此页面设计中显示了列表(没有 AddressLine1 ... AddressLine4)。
https://i.stack.imgur.com/7OINI.png
左栏是我用于编辑操作的id 栏(在编辑窗口中使用SELECT columns FROM customer_list WHERE id='id',id 由(this.CustomerDataGrid.SelectedItem as DataRowView)["id"] 获得)。我已将Visibility.Collapsed 设置为隐藏C# 代码中的id 列以便更好地查看。
但是,由于我不应该在 Table 中创建 Table,Contact、Tel、Email(客户联系人列表)的数据将在另一个 Table 中为 INSERTcontact, tel, email 列。然后我必须想办法将客户联系人列表的表格链接到客户列表。
由于现阶段没有创建数据,我想如果我能找到客户列表数据的id列序列的last_value,那么我可以创建一个与客户列表数据相关的客户联系人列表。
我找到的解决方案是使用SELECT last_value FROM customer_list_id_seq 获取last_value。查询后,我创建一个变量current_value = last_value + 1 来获取下一个序列值。有了这个值,我可以创建一个表customer_contact_list_@current_value,它与未创建的客户列表的数据“相关”。
我知道我可以先保存非客户联系人列表数据,然后通过SELECT id FROM customer_list ORDER BY id DESC LIMIT 1获取customer_list的lastid值。我担心的是:如果我必须添加更多联系人,我仍然可以进行新设计,将 Contact、Tel、Email 的 Group 转换为 DataGrid in WPF。 p>
由于我是编程新手,我的思维方式和设计知识还处于初级阶段。
在这个设计中,数据被分隔在两个 Table 中,这意味着它们没有关系。
我必须使客户联系人列表的表名称与 customer_list.id 相关,以使他们喜欢建立关系。此外,在这个设计中,我必须为每个客户列表的数据(行)创建一个新的客户联系人列表表。
我想知道这种设计是否有更好的方法。
我的另一个设计是在 customer_list 表中添加三列。但是我的查询会很复杂,因为我必须重复“客户 ID、公司名称、地址行、公司电话、传真、支付条款”并尝试过滤它们。即使我将其他 7 的行重复值设置为 null,表格也会看起来很难阅读。
【问题讨论】:
-
看来我需要的是了解数据库规范化。我不应该为 customer_list 中的每一行创建一个新表。我应该创建一个customer_contact_list,其中的列是外键和对customer_list(customer_id)的REFERENCES
标签: c# postgresql