【发布时间】:2014-01-06 19:31:20
【问题描述】:
我目前正在构建自定义应用程序。我的第一个模块已经完成,现在我仍在研究如何为第二个和第三个模块创建结构,以便完美地工作而不会出现任何错误或最糟糕的整个数据库崩溃。
一些信息:-
我的第一个模块,数据是手动导出的,因为数据库是我的第二个和第三个模块使用的主要结构。
我的第二个模块数据是报告日志,点击提交按钮后数据会自动进入数据库,(我假设类似于自动保存)这个模块将作为我的报告列表,就像本周的客户访问次数一样,顶级客户等。
报告当天访问的结果:
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 (人工智能)
- dob
- log_datetime
- log_count
- 金额
profile
- profile_id (AI)
- dob
- 行内
- 行二
- 第三行
- 名字
- 姓氏
现在我需要将profile 附加到log,当我使用我的第二个模块进行报告时,报告将显示log 表中的详细信息:dob、log_datetime、@ 987654329@、amount 和 profile 表:first_name、last_name
如果我将profile_log_id 添加到log 表并得到lastinsertID,则存在用户可能无法输入first_name 或last_name 的问题:因此我将Guest 用于@987654340 @ 和 last_name 列。
另外,如果细节相同,我将使用On Duplicate 更新表格,例如如果first_name、last_name和dob组合已经存在,它将更新现有的profile表。
那么,有什么方法可以让我获得更好的数据库设计结构,以确保数据不会相互冲突,并且我仍然可以使报告和配置文件搜索模块完美运行?
抱歉,我的问题冗长而复杂,因为这是我第一次构建应用程序并且缺乏数据库设计经验。感谢所有帮助我提出更好的结构建议和建议的人。
补充说明:
- 第一个计算 dob 的模块存储了一个表,其列为
dob_id、dob、rowone、rowtwo和rowthree我无法对此进行更多解释,因为该模块是基于写入的关于我妈妈的日常使用。所有的数据都是手动录入数据库,作为主数据拉过来的。 - 第二个模块是
log,用于记录每日日志以供报告。dob列代表每日客户dob,而log_count代表访问时间,amount代表他们为每次访问支付的金额。李> - 第三个模块是
profile,用户在第一个模块的dob搜索过程中选择填写或不填写客户名称,这是用户输入日期、月份和年份的表单(必填字段) 和姓氏作为可选的名字。由于查询和插入是分开进行的,因此主数据首先提取数据,脚本的结尾将是从主表中提取数据的插入(dob,rowone,rowtwo,rowthree) 被输入到配置文件表和日志表中(仅限dob)。log_count和amount已设置,因此每次插入时都会将值返回到数据库。 - 由于名字和姓氏是一个可选值,因此我将把一个空的名字和姓氏替换为
GuestGuest`用于记录目的。 - 我需要一个搜索栏,用户可以直接在
profile表中搜索名字和姓氏,并列出first_name、last_name、dob、rowone、@987654372的所有数据@、rowthree匹配搜索条件。这仅用于普通客户,通过记录他们的个人资料来简化搜索,而不是在他们每次访问和搜索时不断询问他们的dob。这就是为什么如果dobfirst_name和last_name匹配,我将使用更新现有记录而不是继续插入相同的数据,以避免配置文件搜索显示重复数据。
现场案例场景。
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 次客户访问(Guest Guest - DOB:1977-11-17)
- 记录了 1 次客户访问(Guest Guest - DOB:1962-09-28)
- 记录了 1 次客户访问(Guest Guest - DOB:1977-11-17)
Guest 客人不可合并参观:
加入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
总客户访问次数: 20
总收入: 200
所以我需要log 来记录每个表单提交的数据但是profile 如果first_name、last_name、dob 的条件不匹配或匹配,我需要插入,然后它将更新记录。如果报告是年度报告,则访问次数和访问量将在首次记录 log 或 profile 时累加。
对于个人资料搜索,用户将只输入一个名称并返回与搜索匹配的值,例如用户输入John,查询将从表first_name 和last_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
访问次数将从创建个人资料的第一天开始计算,直到当前。
这很复杂,因为我认为它需要与其他表相互链接,但我希望有更好的方法来设计log 和profile 表,而不是让整个数据库崩溃。 我不是要求为我编写代码,但我正在寻找更好的数据库设计的答案,以满足预期的结果。
旁注:目前,该应用程序没有用户登录,但在我解决这个问题后会实施它。出于应用目的,用户登录仅限于管理员和用户。访客或客户无权登录,因为注册是在管理面板中进行的。
希望这些信息能让这里的每个成员更清楚地了解我的意图和期望的结果。
【问题讨论】:
-
规范化设计通常是最好的方法。如果你不知道那是什么意思,我听说过这本书的好东西,数据库设计为凡人。
-
@nescafe,我已经添加了一个答案,但它可能需要根据您的说明进行更改/删除:
log表上的dob、log_count和amount?profile表上的rowone等是什么?用户是登录,还是只输入他们的姓名/dob 详细信息? “访问次数”究竟是为了显示什么? hth
标签: mysql sql database database-design database-schema