我目前正在构建自定义应用程序。我的第一个模块已经完成,现在我仍在弄清楚如何为第二个和第三个模块创建结构,使其完美地工作,而不会出现任何错误,甚至会使整个数据库崩溃。
一些信息:
我的第一个模块是将数据手动导出,因为数据库是我的第二个和第三个模块可以使用的主要结构。
我的第二个模块数据是报告日志,单击提交按钮后,数据会自动输入到数据库中(我认为是自动保存之类的东西),该模块将作为我的报告清单,以每周访问客户数,主要客户和等等
报告当天访问的结果:
Customer Name | Date of Birth | Visit Count | Amount
John Doe | 1948-01-29 | 1 | 10
Guest Guest | 1968-12-16 | 1 | 10
我的第三个模块将是配置文件搜索,其中在单击按钮提交后,数据也会自动输入数据库。该模块将使用户可以搜索配置文件并进入第一个模块,以获取上述行为的报告使用情况列表。
我当前的
log
结构log_id(A.I)
多宝
log_datetime
log_count
量
和
profile
的结构profile_id(A.I)
多宝
行
第二行
行三
名字
姓
现在,当我使用第二个报告模块时,需要将
profile
附加到log
上,报告将显示log
表中的详细信息:dob
,log_datetime
,log_count
, amount
和profile
表:first_name
,last_name
如果将
profile_log_id
添加到log
表中并获得lastinsertID
,则存在一个问题,即用户可能无法输入first_name
或last_name
:因此,我将Guest
用于first_name
和< cc>列。另外,如果细节相同,我将使用
last_name
更新表,例如如果On Duplicate
,first_name
和last_name
组合已经存在,它将更新现有的dob
表。那么,对于我来说,如何获得更好的数据库设计结构以确保数据不会相互冲突,又如何使报告和配置文件搜索模块正常工作,又是什么呢?
很抱歉,我这个漫长而复杂的问题,因为这是我的第一个应用程序构建,并且缺乏数据库设计经验。感谢所有帮助我提出和建议更好结构的人。
附加说明:
第一个计算dob的模块存储在一个表中,该表的列为
profile
,dob_id
,dob
,rowone
和rowtwo
,由于该模块是根据我的妈妈编写的,因此我无法对此进行详细说明日常使用。所有数据都被手动输入到数据库中,以作为主数据提取。第二个模块是
rowthree
,它记录用于报告目的的每日日志。 log
列代表每日客户dob
,而dob
代表拜访时间,log_count
代表他们为每次拜访支付的金额。第三个模块是用户在第一个模块的
amount
搜索过程中选择是否填写客户名称的profile
,这是用户输入日期,月份和年份(必填字段)和第一个的表格名称,姓氏为可选。由于查询和插入是分开进行的,因此主要数据首先提取数据,而脚本的末尾将是从主表提取的数据(dob
,dob
,rowone
,rowtwo
)输入到配置文件表和日志表(仅rowthree
)。设置了dob
和log_count
,以便每次插入时它将值返回到数据库。由于名字和姓氏是一个最佳值,因此出于记录目的,我将一个空的名字和姓氏替换为
amount
Guest`。我需要一个搜索栏,用户可以在其中直接搜索
Guest
表中的名字和姓氏,并列出profile
,first_name
,last_name
,dob
,rowone
,< cc>符合搜索条件。这仅用于普通客户,通过记录他们的个人资料来简化搜索,而不是每次访问和通过dob搜索时都不断询问他们的rowtwo
。因此,如果rowthree
dob
和dob
匹配,我将使用更新现有记录而不是继续插入相同的数据,以避免配置文件搜索显示重复数据。现场案例。
1月:总共有20位客户访问。
记录有4位客户并且是同一个人的访问(John Doe-DOB:1948-12-19)。
记录了3位客户的访问,并且与前4位访问的人不同(John Doe-DOB:2000-07-31)
5位客户的访问记录为同一个人(Vin Diesel-DOB:1959-03-22)
5位客户的访问记录为同一个人(Teresa John-DOB:1988-05-18)
记录了1个客户的访问(访客访客-DOB:1977-11-17)
记录了1个客户的访问(访客-DOB:1962-09-28)
记录了1个客户的访问(访客-DOB:1977-11-17)
访客访客不可合并访问:
联接
first_name
和last_name
表的报告结果Customer Name | Date of Birth | Visit Count | Amount
John Doe | 1948-12-19 | 4 | 40
John Doe | 2000-07-31 | 3 | 30
Vin Diesel | 1959-03-22 | 5 | 50
Teresa John | 1988-05-18 | 5 | 50
Guest Guest | 1977-11-17 | 1 | 10
Guest Guest | 1962-09-28 | 1 | 10
Guest Guest | 1977-11-17 | 1 | 10
拜访客户总数:20
总收入:200
因此,我需要
log
来记录每个表单提交的数据,但是profile
如果log
,profile
,first_name
的条件不匹配或匹配,则需要插入last_name
,它将更新记录。如果报告是针对该年份的,则访问次数和访问量将在第一次记录dob
或log
之前累加。对于概要文件搜索,用户将仅输入名称并返回与搜索匹配的值,例如,用户输入
profile
,查询将从表John
中查找,并且first_name
应返回以下结果:Customer Name | Date of Birth | Visit Count | Row One | Row Two | Row Three
John Doe | 1948-12-19 | 4 | 3 | 8 | 12
John Doe | 2000-07-31 | 3 | 7 | 1 | 6
Teresa John | 1988-05-18 | 5 | 2 | 10 | 8
访问次数将从创建个人资料的第一天到当前为止进行计算。
它非常复杂,因为我认为它需要相互链接表,但是我希望有一种更好的方法来设计
last_name
和log
表,而不是崩溃整个数据库。我不是在要求为我提供代码,而是在寻找更好的数据库设计以满足所需结果的答案。旁注:目前,该应用程序尚无用户登录,但在我正确解决此问题后将实现它。用户登录仅限于admin和user的应用程序目的。访客或客户无权登录,因为在管理面板中进行了注册。
希望此信息能使这里的每个成员都更清楚我的意图和期望的结果。
最佳答案
如果我正确理解,则log
用于自动记录用户操作的详细信息,而profile
保留用户的详细信息。
对于log
表,您似乎正在尝试保存汇总数据,这需要在每次提交表单时进行更新。我建议您只插入一个新的日志条目[例如log_id
,log_date
,profile_id
,amount
]提交,并将汇总留给报告。要启用从log
到profile
的联接,我们包括profile_id
。
对于profile
表,您可能应该允许first_name
| last_name
| dob
重复输入,并尝试找到另一种使其唯一的方式(通过使用profile_id
,通过电子邮件或护照进行)没有)。
我不确定您打算使用rowone
,rowtwo
,rowthree
。如果您知道它们是什么,请明确命名。如果它们用于重复次数未知的项目,请考虑将其移动到单独的表格中(即规范化)。
对于您的报告,您将编写一个查询以将log
和profile
表连接在一起,并进行汇总(即在必填字段上将GROUP BY
与SUM
和/或COUNT
进行合并。“访问计数”将是该配置文件的日志条目的COUNT
,“金额”将是SUM
的amount
。
关于mysql - 创建mysql数据库结构的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957748/