MySQL最佳方法用于数据库规范化,关系和外键

时间:2013-08-13 00:41:41

标签: mysql foreign-keys relational-database database-normalization

首先是用户名/密码验证步骤,然后数据库具有以下结构

^ is primary key

* uses foreign key


1.StudentDetails table
===========================================================================  
 ID^| Username   | Password | Email       | Address * | Website |Comments
====+============+==========+=============+===========+=========+========== 
1   | xxxxxxxxxx | xxxxxxx  | xx@xxx.xxx  | 1         | http:// | text

2.Submissions table
===========================================================================================
ID^|Username*|SubmitDate|SelectedCourse*|Price*|Promotion*|SubmitComments|SubmitStatus*
===+=========+==========+===============+======+==========+==============+=================
1  |xxxxxxxxx|2013-7-12 |  int          | int  |  int     | text         | int


3.SubmitComplete table
==================================================
ID^| Username * | SelectionDate | SubmitStatus *  
====+============+===============+================
1   | xxxxxxxxxx |  2013-08-01   | int

现在我在输入地址时遇到问题,当我尝试输入学生详细信息时,在有地址字段之前它不会接受,如何最好地解决这个问题? 当我从左边连接中选择StudentDetails中的某些字段和地址中的某些字段时,地址不会显示。

我是一个mysql noob,所以我想要一些指导,看看规范化和结构是否已经正确完成,还是可以做得更好,这里是fiddle我无法让它工作正确地,在我添加外键的行上不断出错,即使架构的构建在我的机器上运行良好。

小提琴控制台在第2行说错误,但在我看来它实际上在第76行。 如果有任何我不清楚的事情,请告诉我。 感谢

3 个答案:

答案 0 :(得分:2)

好的,让我解释一下它会是怎样的。我用两个表格做了一个例子,你可以在下面看到。

simple model

然后您可以创建查询。

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| addresses      |
| students       |
+----------------+
2 rows in set (0.00 sec)

mysql> select * from students;
+----+----------+-----------+
| id | name     | last_name |
+----+----------+-----------+
|  1 | jhon     | smith     |
|  2 | anderson | neo       |
|  3 | trinity  | jackson   |
+----+----------+-----------+
3 rows in set (0.00 sec)

mysql> select * from addresses;
+----+-----------------+---------+
| id | address         | student |
+----+-----------------+---------+
|  1 | Av 1 2nd Street |       1 |
|  2 | Av 3 4 Street   |       2 |
|  3 | St 23 7 Av      |       3 |
+----+-----------------+---------+
3 rows in set (0.00 sec)

mysql> select s.name,s.last_name,a.address from students s join addresses a on a.student=s.id;
+----------+-----------+-----------------+
| name     | last_name | address         |
+----------+-----------+-----------------+
| jhon     | smith     | Av 1 2nd Street |
| anderson | neo       | Av 3 4 Street   |
| trinity  | jackson   | St 23 7 Av      |
+----------+-----------+-----------------+
3 rows in set (0.00 sec)

答案 1 :(得分:0)

选项1:
首先输入地址数据,并在StudentDetails中创建行时使用该ID

选项2:
更改字段StudentDetails.Address,使其允许NULL valus,输入StudentDetails,然后输入地址,然后更新StudentDetails.Address

答案 2 :(得分:0)

最好使用数字格式的外键所以Username应该是StudentDetails表的id。

您可以放置​​您尝试运行的SQL查询吗?