建议创建mysql数据库结构

时间:2014-01-06 19:31:21

标签: 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)
  • DOB
  • log_datetime
  • log_count
  • 金额

profile

的结构
  • profile_id(A.I)
  • DOB
  • rowone
  • rowtwo
  • rowthree
  • 如first_name
  • 姓氏

现在,当我使用第二个模块进行报告时,我需要将profile附加到log,报告将显示log表中的详细信息:{ {1}},doblog_datetimelog_countamount表:profilefirst_name

如果我将last_name添加到profile_log_id表并获取log,则会出现用户可能无法输入lastinsertIDfirst_name的问题:因此我将last_name用于Guestfirst_name columm。

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

那么我有什么方法可以获得更好的数据库设计结构以确保数据不会相互冲突,我仍然可以使报表和配置文件搜索模块完美运行?

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

附加说明:

  1. 计算dob的第一个模块存储在一个表格中,其中包含profiledob_iddobrowonerowtwo列,我无法&#39 ; t解释更多关于这个,因为这个模块是根据我妈妈的日常用法写的。所有数据都手动输入到数据库中,作为主要数据提取。
  2. 第二个模块是rowthree,它记录每日日志以进行报告。 log列代表每日客户dob,而dob代表访问时间log_count代表金额他们为每次访问付费。
  3. 第三个模块是用户选择在amount搜索第一个模块时选择填写客户名称的profile,该表格是用户输入日期,月份和年(必填字段)和姓氏作为可选的姓氏。由于查询和插入是分开进行的,因此主数据首先提取数据,脚本的结尾将是从主表(dobdob,{{1 },rowone)进入配置文件表和日志表(仅rowtwo)。 rowthreedob已设置为每次插入时都会将值返回到数据库。
  4. 由于名字和姓氏是一个optinal值,因此我会将一个空的名字和姓氏替换为log_count Guest`以进行录制。
  5. 我需要一个搜索栏,用户可以直接在amount表格中搜索姓名,并列出Guestprofile,{{1}的所有数据与搜索条件匹配的},first_namelast_namedob。这仅适用于普通客户,通过记录他们的个人资料来简化搜索,而不是每次访问和通过dob搜索时都要求他们rowone。这就是为什么我会使用更新现有记录而不是在rowtwo rowthreedob匹配时继续插入相同数据,以避免配置文件搜索显示重复数据

  6. 实况案例。

    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)

    访客访客不允许结合访问:

    加入dobfirst_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}的标准}没有匹配或匹配,那么它将更新记录。如果报告是针对该年度的,那么访问次数和金额将在首次记录profilefirst_name时累加。

    对于个人资料搜索,用户只会输入一个名称并返回与搜索匹配的值,例如用户输入last_name,查询将从表dob和{{1应该返回以下结果:

    log

    访问次数将从创建的个人资料的第一天开始计算到当前。

    它非常复杂,因为我认为它需要与其他表相互链接,但我希望有更好的方法来设计profileJohn表而不是崩溃了整个数据库。 我不是要求为我做代码,但我正在为更好的数据库设计寻找答案,以满足预期的结果。

    旁注:目前,该应用程序没有用户登录,但是在我正确地解决了这个问题之后会实现它。用户登录仅限于管理员和用户以用于应用目的。访客或客户无权登录,因为注册是在管理面板中进行的。

    希望这些信息能让每位成员更清楚地了解我的意图和期望的结果。

1 个答案:

答案 0 :(得分:0)

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

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

对于profile表格,您可能应该允许first_name | last_name | dob的重复条目,并尝试找到另一种方法使其成为唯一(通过使用profile_id,或通过电子邮件或护照号码。

我不确定您对rowonerowtworowthree的意图。如果你知道它们是什么,那么明确地命名它们;如果它们用于重复未知次数的项目,请考虑将它们移动到单独的表格(即标准化)。

对于您的报告,您将编写一个查询,将logprofile表一起加入聚合(即GROUP BYSUM和/或{ {1}}必填字段。“访问计数”将是该个人资料的COUNT日志条目,“金额”将是COUNT的{​​{1}}。