当用户客户端存储在数据库中时,我就有这种情况
并且存在诸如姓名,地址,州,邮编,国家,电子邮件等的内容。
clients_table
client_id, client_name, client_address, client_state ...etc
会员可以向现有客户或新客户出售(未保存的数据)
我必须将交易存储在数据库中
我想到了方法NUMBER 1
transactions_table
trxid, client_id, client_name, client_address, client_state ...etc
其中client
_ id引用client
上的clients_table
_ id
为了避免在数据库中放置数字,当交易时
提取我做2个查询
- 第一次查询会检查client_id
上transactions_table
是否为clients_table
是或否。如果它不为null,则客户端已经存在于数据库中
在这种情况下,进行第二次查询以获取客户端的客户端数据
具有该特定ID,在client_id
上
- 如果transactions_table
上的(defn parallel-api-query
[queries]
(let [qs (map http/get queries)
bodies (map #(json/read-str (:body @%)) qs)]
bodies))
为空,则表示未存储客户端数据(客户端客户端)
并且所有可用数据都存储在交易表中
这样,当client_id存在但我避免输入相同的客户端数据时,我会进行额外的查询
一遍又一遍。
方法编号2
而不是检查交易是否属于已保存的客户端
我只是将客户端数据ALWAYS存储在transactions_table中,所以我将为
有一个非常大的,多次的公布表
你们有什么感想?我应该采用方法1还是2?
答案 0 :(得分:2)
你现在拥有的是好的,你应该总是尽量避免重复数据。
但是,您不必编写两个查询。无论是否存在与事务关联的客户端,您都可以使用LEFT JOIN
来提取所有事务和客户端。
读取数据时,可以检查client_id列是否为空。如果是,请不要费心阅读其他专栏。如果它不为空,您可以从中读取。