我目前正致力于构建自定义应用程序。我的第一个模块已经完成,现在我还在弄清楚如何创建第二个和第三个模块的结构,以便完美地工作而不会出现任何错误或最坏的整个数据库崩溃。
部分信息: -
我的第一个模块,手动导出数据,因为数据库是我的第二个和第三个模块的主要结构。
我的第二个模块数据是报告日志,其中数据在按钮提交点击时自动进入数据库,(例如自动保存,我假设)此模块将作为我的报告列表,与本周客户访问次数一样,顶级客户等。
报告当天访问的结果:
Customer Name | Date of Birth | Visit Count | Amount
John Doe | 1948-01-29 | 1 | 10
Guest Guest | 1968-12-16 | 1 | 10
我的第三个模块将是个人资料搜索,其中数据也会在按钮提交点击后自动进入数据库。此模块将供用户搜索配置文件,并按照上述行为继续执行第一个模块以及报告使用情况列表。
log
profile
现在,当我使用第二个模块进行报告时,我需要将profile
附加到log
,报告将显示log
表中的详细信息:{ {1}},dob
,log_datetime
,log_count
和amount
表:profile
,first_name
如果我将last_name
添加到profile_log_id
表并获取log
,则会出现用户可能无法输入lastinsertID
或first_name
的问题:因此我将last_name
用于Guest
和first_name
columm。
另外,如果细节相同,我会使用last_name
更新表格,例如如果On Duplicate
,first_name
和last_name
组合已经存在,它将更新现有的dob
表。
那么我有什么方法可以获得更好的数据库设计结构以确保数据不会相互冲突,我仍然可以使报表和配置文件搜索模块完美运行?
对于我这个漫长而复杂的问题感到抱歉,因为这是我的第一个应用程序构建,缺乏数据库设计经验。感谢所有帮助我建议和建议更好结构的人。
附加说明:
profile
,dob_id
,dob
,rowone
和rowtwo
列,我无法&#39 ; t解释更多关于这个,因为这个模块是根据我妈妈的日常用法写的。所有数据都手动输入到数据库中,作为主要数据提取。rowthree
,它记录每日日志以进行报告。 log
列代表每日客户dob
,而dob
代表访问时间,log_count
代表金额他们为每次访问付费。amount
搜索第一个模块时选择填写客户名称的profile
,该表格是用户输入日期,月份和年(必填字段)和姓氏作为可选的姓氏。由于查询和插入是分开进行的,因此主数据首先提取数据,脚本的结尾将是从主表(dob
,dob
,{{1 },rowone
)进入配置文件表和日志表(仅rowtwo
)。 rowthree
和dob
已设置为每次插入时都会将值返回到数据库。log_count
Guest`以进行录制。amount
表格中搜索姓名,并列出Guest
,profile
,{{1}的所有数据与搜索条件匹配的},first_name
,last_name
,dob
。这仅适用于普通客户,通过记录他们的个人资料来简化搜索,而不是每次访问和通过dob搜索时都要求他们rowone
。这就是为什么我会使用更新现有记录而不是在rowtwo
rowthree
和dob
匹配时继续插入相同数据,以避免配置文件搜索显示重复数据实况案例。
1月份:共有20位客户访问。
访客访客不允许结合访问:
加入dob
和first_name
last_name
全面客户访问: 20
总收入: 200
所以我需要log
来记录每个表单提交的数据,但profile
我需要插入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
,log
,{{1}的标准}没有匹配或匹配,那么它将更新记录。如果报告是针对该年度的,那么访问次数和金额将在首次记录profile
或first_name
时累加。
对于个人资料搜索,用户只会输入一个名称并返回与搜索匹配的值,例如用户输入last_name
,查询将从表dob
和{{1应该返回以下结果:
log
访问次数将从创建的个人资料的第一天开始计算到当前。
它非常复杂,因为我认为它需要与其他表相互链接,但我希望有更好的方法来设计profile
和John
表而不是崩溃了整个数据库。 我不是要求为我做代码,但我正在为更好的数据库设计寻找答案,以满足预期的结果。
旁注:目前,该应用程序没有用户登录,但是在我正确地解决了这个问题之后会实现它。用户登录仅限于管理员和用户以用于应用目的。访客或客户无权登录,因为注册是在管理面板中进行的。
希望这些信息能让每位成员更清楚地了解我的意图和期望的结果。
答案 0 :(得分:0)
如果我理解正确,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
和/或{ {1}}必填字段。“访问计数”将是该个人资料的COUNT
日志条目,“金额”将是COUNT
的{{1}}。