如何将多个外键添加到表的一列?

时间:2015-01-05 22:15:56

标签: mysql

我正在考虑如何建立讲座 - 学生关系。我们说我有:

  • 一个名为学生的表格,每个学生都有一个学生。
  • 一个名为讲座的表格,其中包含studentid字段和讲座。

是否有可能在studentntid列的讲座表中有多个ID,如1,2,3,4,5,这意味着当这些学生ID中的任何一个登录到系统时,他们将看到具体的讲座?

我的逻辑可能存在缺陷,但我对MySQL很陌生,而且我正在考虑如何避免每个学生有一个讲座记录。

5 个答案:

答案 0 :(得分:1)

您应该使用连接表。它只是另一个表,其中一个键引用了演讲,第二个表引用了相关的学生。每个学生 - 讲座关系你有一排。它的作用是防止删除异常,例如当你删除一个学生时,他可能不应该在任何讲师的名单上。您可以通过级联删除来配置数据库,因此当您删除学生时,他所有关于讲座的条目都会消失。更不用说对这样的数据库执行查询比使用1单元版本要困难得多。

答案 1 :(得分:1)

我会再使用一个名为“StudentLectureMap'并制作了学生和讲师。 此外,如果您使用外键引用,那么在删除它们之间的地图之前,没有人可以删除讲座或学生。

答案 2 :(得分:1)

这是一个简单的解决方案。创建三个表:学生,讲座,student_lecture。你必须创建一个“联结”表。

student
student_id (Auto increment and primary key)
student_name

lecture
lecture_id (Auto increment and primary key)
lecture_name

student_lecture (after you added student_id and lecture_id, make sure you create indexes and assign the student_id and lecture_id as a foreign key from their tables)
student_id (foreign key from student table)
lecture_id (foreign key from lecture table)

phpMyAdmin,一步一步。

  1. 您的结构应如下所示:
  2. enter image description here

    1. 您的联结表。点击student_id和lecture_id的“index”。
    2. enter image description here

      1. 创建索引后,单击“关系视图”并选择主表,然后单击“保存”。瞧!
      2. enter image description here

        完成此操作后,您将能够为每位学生添加多个讲座。例如,学生A可以参加讲座1,讲座2,讲座3.另外,学生B可以参加讲座1,讲座2,讲座3。

        此外,您可以观看此视频以便更好地了解:http://www.youtube.com/watch?v=A42FG4LzdbY

答案 3 :(得分:1)

如果您有一对一的关系,可以将外键(学生ID)放入讲座表中。但由于每个讲座可能有很多学生,每个学生可能会有很多讲座,你需要一个其他人建议的加入表。

可以将多个ID放入“单元格”中,但它很混乱,并且不利用关系数据库系统的值。 MySQL有一种本地的方式来做你想做的事情,但它仍然很乱并且不理想。

就CASCADE选项而言,它们将设置在您拥有外键的位置:在连接表中。连接表有2列:“student_id”和“lecture_id”。您可能不希望在连接表中保留不存在的ID。例如,如果学生辍学并删除了他们的学生ID,为什么您希望他们在您的联接表中的ID与各种讲座相匹配?您可能不会,因此您将它们设置为ON DELETE CASCADE,以便删除它们在连接表中的条目。

对于查找,您只需根据连接表中的内容从主表中获取值。如果你想向学生展示他们所参加的每一个讲座,你都会做这样的事情。

SELECT * FROM `lectures_table`
RIGHT JOIN `lectures_students` ON lectures_students.student_id = 5 # // you already have their id b/c they are logged in
AND lectures_table.id = lectures_students.lecture_id

现在,您可以从讲座表中获得一整套数据,仅限于学生注册的课程。

如果您希望所有学生参加讲座(也许是为了您自己的阅读),您可以这样做:

SELECT * FROM `students_table`
RIGHT JOIN `lectures_students` ON lectures_students.lecture_id = 27 # // you have the lecture id because that's what you clicked on to view
AND students_table.id = lectures_students.student_id

答案 4 :(得分:0)

以下是一个例子:

<?
// use this to store in database // You can insert Ids inside this array I mean instead of foo, bar etc you can use ids.
$array = array("foo", "bar", "hello", "world");
$conn=mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db("mysql_db",$conn);
$array_string=mysql_escape_string(serialize($array));
mysql_query("insert into table (column) values($array_string)",$conn);
?>

<?
// use this to get data from database
$conn=mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db("mysql_db",$conn);
$q=mysql_query("select column from table",$conn);
while($rs=mysql_fetch_assoc($q))
{
$array= unserialize($rs['column']);
print_r($array);
}
?>

在存储和检索数据时不要忘记serialize and unserialize数组。