Php 构造数据库表

Php 构造数据库表,php,mysql,database,phpmyadmin,Php,Mysql,Database,Phpmyadmin,我创建了一个投票网站,用户可以注册和投票。我只为用户信息和通信创建了一个表。以下是表格的列和行: 用户: 列:用户名密码同意\u 1原因\u 1同意\u 2原因\u 2 行:paul testing yes NULL no因为我不喜欢它 我从这里的一位成员那里得到了一个建议,他说我应该这样重组我的表格: 用户 -身份证 -电子邮件 -名字 民意测验 -身份证 -名字 问题 -身份证 -民意测验 -问题: -命令 答案 -身份证 -问题编号 -用户id -答复 请确定哪一列是主键,哪一列是外键

我创建了一个投票网站,用户可以注册和投票。我只为用户信息和通信创建了一个表。以下是表格的列和行:

用户:

列:用户名密码同意\u 1原因\u 1同意\u 2原因\u 2
行:paul testing yes NULL no因为我不喜欢它
我从这里的一位成员那里得到了一个建议,他说我应该这样重组我的表格:

用户
-身份证
-电子邮件
-名字
民意测验
-身份证
-名字
问题
-身份证
-民意测验
-问题:
-命令
答案
-身份证
-问题编号
-用户id
-答复
请确定哪一列是主键,哪一列是外键。我需要知道一张桌子和另一张桌子的关系。请帮忙。感谢

更多的时候,“id”是该特定表的主键table1name\u id是该表中与表1相关的外键


e、 g.在您的示例中,每个表的id是该表的主键,
poll\u id
问题
表中的外键,该表将“问题”表与轮询“表”关联起来。

从技术上讲,这两种方法都是可用的

这个问题实际上可以归结为重用问题。如果您打算将此网站用于其他投票,那么您的同事的方法是正确的

然而,如果这是一个单一的射击类型的交易,那么你开始与罚款

您的方法将大大减少代码/设置。他会花更多的时间让你理解EAV模型的复杂性;特别是在报告方面。使用EAV设计构建性能查询并不适合胆小的人

当然有一个中间立场。也就是说,将登录信息分离到自己的表中,并创建一个“poll”answers表,该表只包含您关心的4列。这种方法没有EAV方法的任何灵活性,但符合关于结构的标准DB设计标准,并且非常容易组合和查询

最后,还有第四种选择:与其自己写,不如在一个免费投票的网站上注册。例如:注意:我与他们没有关系,也没有使用过他们的产品。这只是一个在2秒钟的谷歌搜索中弹出的网站


由于评论而更新 是的,您可以对原来的结构执行简单的查询。例如:

  • 计数用户数:
    从用户中选择count(*)

  • 计算表示同意的人数:
    同意的是:\u 1:
    从同意的用户中选择count(*)=“是”

    两者都是:
    从用户中选择count(*),其中agree_1='Yes'和agree_2='Yes'

    是:
    从用户中选择count(*),其中agree_1='Yes'或agree_2='Yes'

  • 计算拒绝的人数:
    “否”表示同意。\u 1:
    从“同意”为“否”的用户中选择计数(*)

    两者均为否:
    从用户中选择count(*),其中agree_1='No'和agree_2='No'

    否:
    从用户中选择count(*),其中agree_1='No'或agree_2='No'

  • 显示
    仅注释:
    从用户中选择原因1、原因2

    仅是“是”注释:
    从同意的用户中选择原因\u 1='yes'

    任何一列中的评论是否为“是”:
    从agree\u 1='yes'的用户中选择原因\u 1联合所有从agree\u 2='yes'的用户中选择原因\u 2作为原因\u 1


  • 在数据库中使用关系可以保持数据的有效性和规范性,尝试使用一种不包含冗余数据的结构,这个人建议您可以开始使用,您所要做的就是使用InnoDB引擎处理表。 将id设置为users、poll、questions and answers表中的主id,并将索引添加到外键列,即(question_id、poll_id、user_id)。 地图


    这在phpmyadmin的关系观中很容易做到

    @ceejayoz:也许对我们这些已经在这里呆了一段时间的人来说;不过,我猜这部作品还是很新的。这是一个有效的问题。如果有人问一个问题,“应该很明显”作为回答是毫无价值的,也是一种侮辱。谢谢。该网站将不会用于额外的投票。我想这样做,我可以做到以下几点:统计用户数量,统计说是的人数,统计说不是的人数,只显示评论。我可以通过上面的第一个表结构实现这一点吗?
        answers.question_id to questions.id 
        questions.poll_id to polls.id
        answers.user_id  to users.id