2017-04-08 115 views
0

我正在做我的第一个使用MySQL的项目。要做到这一点,我需要整理以下值 - 电子邮件,主题,提问,回答
这里展示我想到的一个图像 enter image description here如何组织这个MySQL数据库?

基本上,每一个用户,通过电子邮件地址标识,使问题和有关给定主题列表的答案。我不确定如何以一种可以正常化的方式来组织它。

作为MySQL的新手,我认为先问更多有经验的人会更好。关于如何组织这个的任何想法,以及关于组织MySQL数据库的一般技巧?

+0

这是一个非常广泛的问题。但考虑到每个主题下会有一个或多个问题,每个问题都会有一个或多个答案。 –

+0

你需要弄清楚你的实体(类)之间的关系和多样性。确实是一个非常广泛的主题,阅读一些教程,创建带有链接表和属性的数据库方案,然后提出一个新问题。 –

回答

0

这种形象对我来说很好,但是......

如果我看了你的项目约束正确的,你是有限的一组离散可用科目?如果是这种情况,可用主题的单独表格可能会很好。

所以它可以像一张表一样简单,但我个人可能会考虑两个(第二个主题),以避免人们提交相同主题(例如数学和数学)的多个/小的变化。

如果你想变得有趣,也许可以考虑发布基本相同问题的类似变化的含义。假设,如果数据库是用于FAQ应用程序的,那么当有人正在起草与已经收到答复的另一个问题非常相似的问题时,您可能希望在提交新问题之前将该问题重定向到该问题。

0

这是MySQL中我能想到的最简单的方法。

DROP TABLE IF EXISTS `_user`; 
CREATE TABLE `_user` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(32) DEFAULT NULL, 
    `password` varchar(40) DEFAULT NULL, 
    `first_name` varchar(32) DEFAULT NULL, 
    `last_name` varchar(32) DEFAULT NULL, 
    `email_address` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 


DROP TABLE IF EXISTS `questions`; 
CREATE TABLE IF NOT EXISTS `questions` (
    `question_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) DEFAULT NULL, 
    `subject_id` int(11) DEFAULT NULL, 
    `question` varchar(200) DEFAULT NULL, 
    PRIMARY KEY (`question_id`), 
    KEY `user_id` (`user_id`), 
    KEY `subject_id` (`subject_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; 


DROP TABLE IF EXISTS `answers`; 
CREATE TABLE IF NOT EXISTS `answers`(
    `answer_id` int(11) NOT NULL AUTO_INCREMENT, 
    `question_id` int(11) DEFAULT NULL, 
    `user_id` int(11) DEFAULT NULL, 
    `answer` varchar(200) DEFAULT NULL, 
    PRIMARY KEY (`answer_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; 


DROP TABLE IF EXISTS `subjects`; 
CREATE TABLE IF NOT EXISTS `subject` (
    `subject_id` int(11) NOT NULL AUTO_INCREMENT, 
    `subject` varchar(200) DEFAULT NULL, 
    PRIMARY KEY (`subject_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; 

查询应该是这个样子this--

$query = "SELECT 
questions.question, 
answers.answer, 
subjects.subject, 
_user.email_address 
FROM questions 
INNER JOIN answers 
ON answers.question_id = questions.question_id 
LEFT JOIN subjects 
ON subjects.subject_id = questions.subject_id 
LEFT JOIN _user 
ON _user.user_id = questions.user_id 
"; 
+0

我在创建表之前放置了“DROP TABLE”,这样我可以在开发时快速覆盖数据库。最好熟悉'phpmyadmin'。 –

+0

谢谢!我尝试了代码,它运行良好。但是,它确实有助于了解以何种方式将问题中的图像转换为代码(使用完全给定的值)https://i.stack.imgur.com/Xa1Xe.png。 – IDK

+0

哎呀!我没有看到图像。 Sry基因。添加另一个表格将问题分类到类别中,并将问题的关键值添加到问题中,并将其置于类别中。 –

0

这是首选的设计为您的情况:

enter image description here

每个用户都可以对每多question小号subject

A ND每个Subject可以有很多user S'questions

在您可以添加其余的数据每个表你想