mysql - 创建mysql数据库结构的建议

标签 mysql sql database database-design database-schema

我目前正在构建自定义应用程序。我的第一个模块已经完成,现在我仍在弄清楚如何为第二个和第三个模块创建结构,使其完美地工作,而不会出现任何错误,甚至会使整个数据库崩溃。

一些信息:

我的第一个模块是将数据手动导出,因为数据库是我的第二个和第三个模块可以使用的主要结构。

我的第二个模块数据是报告日志,单击提交按钮后,数据会自动输入到数据库中(我认为是自动保存之类的东西),该模块将作为我的报告清单,以每周访问客户数,主要客户和等等

报告当天访问的结果:

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表中的详细信息:doblog_datetimelog_countamountprofile表:first_namelast_name

如果将profile_log_id添加到log表中并获得lastinsertID,则存在一个问题,即用户可能无法输入first_namelast_name:因此,我将Guest用于first_name和< cc>列。

另外,如果细节相同,我将使用last_name更新表,例如如果On Duplicatefirst_namelast_name组合已经存在,它将更新现有的dob表。

那么,对于我来说,如何获得更好的数据库设计结构以确保数据不会相互冲突,又如何使报告和配置文件搜索模块正常工作,又是什么呢?

很抱歉,我这个漫长而复杂的问题,因为这是我的第一个应用程序构建,并且缺乏数据库设计经验。感谢所有帮助我提出和建议更好结构的人。

附加说明:


第一个计算dob的模块存储在一个表中,该表的列为profiledob_iddobrowonerowtwo,由于该模块是根据我的妈妈编写的,因此我无法对此进行详细说明日常使用。所有数据都被手动输入到数据库中,以作为主数据提取。
第二个模块是rowthree,它记录用于报告目的的每日日志。 log列代表每日客户dob,而dob代表拜访时间,log_count代表他们为每次拜访支付的金额。
第三个模块是用户在第一个模块的amount搜索过程中选择是否填写客户名称的profile,这是用户输入日期,月份和年份(必填字段)和第一个的表格名称,姓氏为可选。由于查询和插入是分开进行的,因此主要数据首先提取数据,而脚本的末尾将是从主表提取的数据(dobdobrowonerowtwo )输入到配置文件表和日志表(仅rowthree)。设置了doblog_count,以便每次插入时它将值返回到数据库。
由于名字和姓氏是一个最佳值,因此出于记录目的,我将一个空的名字和姓氏替换为amount Guest`。
我需要一个搜索栏,用户可以在其中直接搜索Guest表中的名字和姓氏,并列出profilefirst_namelast_namedobrowone,< cc>符合搜索条件。这仅用于普通客户,通过记录他们的个人资料来简化搜索,而不是每次访问和通过dob搜索时都不断询问他们的rowtwo。因此,如果rowthree dobdob匹配,我将使用更新现有记录而不是继续插入相同的数据,以避免配置文件搜索显示重复数据。




现场案例。

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_namelast_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如果logprofilefirst_name的条件不匹配或匹配,则需要插入last_name,它将更新记录。如果报告是针对该年份的,则访问次数和访问量将在第一次记录doblog之前累加。

对于概要文件搜索,用户将仅输入名称并返回与搜索匹配的值,例如,用户输入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_namelog表,而不是崩溃整个数据库。我不是在要求为我提供代码,而是在寻找更好的数据库设计以满足所需结果的答案。

旁注:目前,该应用程序尚无用户登录,但在我正确解决此问题后将实现它。用户登录仅限于admin和user的应用程序目的。访客或客户无权登录,因为在管理面板中进行了注册。

希望此信息能使这里的每个成员都更清楚我的意图和期望的结果。

最佳答案

如果我正确理解,则log用于自动记录用户操作的详细信息,而profile保留用户的详细信息。

对于log表,您似乎正在尝试保存汇总数据,这需要在每次提交表单时进行更新。我建议您只插入一个新的日志条目[例如log_idlog_dateprofile_idamount]提交,并将汇总留给报告。要启用从logprofile的联接,我们包括profile_id

对于profile表,您可能应该允许first_name | last_name | dob重复输入,并尝试找到另一种使其唯一的方式(通过使用profile_id,通过电子邮件或护照进行)没有)。

我不确定您打算使用rowonerowtworowthree。如果您知道它们是什么,请明确命名。如果它们用于重复次数未知的项目,请考虑将其移动到单独的表格中(即规范化)。

对于您的报告,您将编写一个查询以将logprofile表连接在一起,并进行汇总(即在必填字段上将GROUP BYSUM和/或COUNT进行合并。“访问计数”将是该配置文件的日志条目的COUNT,“金额”将是SUMamount

关于mysql - 创建mysql数据库结构的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957748/

相关文章:

php - @(或 "at sign")提前结束我的 MySQL 查询,导致错误

sql - 销售人员每个客户的最高价格汇总

sql - PL/SQL ExcelDocumentType 文档名称错误

mysql - 最好的方法,将更改和未更改的值存储到 MySql 数据库中

php - MySQL从结果表中显示球队排名

mysql - SQL 中 NULL 的大小写

mysql - FIND_IN_SET 或 SELECT * FROM

php - php 中是否可以采用 sqlite 数据库和 mysql 数据库并相互运行查询?

php - 为空白的调用数据库字段分配默认值

database - 如何检索表中的行数