在MySQL中创建1对多的关系?

哮喘

会员
已加入
2014年10月11日
留言内容
7
编程经验
Beginner
我是mysql的新手,当前使用c#visual Studio2012。我需要一对多关系教程。例如,我制作了一个名为MovieList的表,其列名为TitleMovie的列为1,现在我想创建另一个名为acc1_MyWatchlist的表,并它的内部也是TitleMovie ..我的问题是我想在acc1_mywatchlist中插入一个值,但仅在Movielist的TitleMovie中插入可用的值,如果我尝试创建另一个表acc2_mywaychlist,则它应该与第一个表相同,并且如果我尝试编辑MovieList表中的某些值,应该会影响具有相同列TitleMovie ...的所有表。

在Access数据库中,我只使用查找向导,但是mysql当然是不同的,因此您可以举一些这个查询的例子。
 

哮喘

会员
已加入
2014年10月11日
留言内容
7
编程经验
Beginner
是的,如果您能给我一些有关我给出的示例的查询,将不胜感激,因此我可以将其用作使用c#制作库存系统的参考
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
首先,电影信息仅应存储在一个位置,即,您不要在acc1_MyWatchlist表(其中acc1_My的组成部分)中的MovieList表(该表实际上应仅命名为Movie和列Title的列)中复制信息。 )。例如,假设您有一个带有MovieId和Title列的Movie表,一个带有UserId列的User表和一个WatchList表,该表存储每个用户观看的电影列表。 WatchList表应该仅具有UserId和MovieId列,而没有Title列。如果要获取特定用户观看的每部电影的标题,则将WatchList表与Movie表结合起来并按UserId进行过滤:
C#:
SELECT Title
FROM WatchList INNER JOIN Movie
ON WatchList.MovieId = Movie.MovieId
WHERE WatchList.UserId = ?UserId
至于如何创建外键,我很少使用MySQL,因此我实际上并不知道,但是我敢肯定,通过搜索网络可以很容易地找到它。例如,如果要使用MySQL Workbench管理数据库:

//www.google.com.au/search?q=...&oe=utf-8&gws_rd=cr&ei=eHyWVKiSIdfn8AXx0YCgBg
 

哮喘

会员
已加入
2014年10月11日
留言内容
7
编程经验
Beginner
非常感谢您的回复并提供了一些提示。.看起来我在这里确实犯了一个错误..我正在尝试创建一个帐户,每个帐户应有自己的监视列表
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
非常感谢您的回复并提供了一些提示。.看起来我在这里确实犯了一个错误..我正在尝试创建一个帐户,每个帐户应有自己的监视列表

这确实是错误的做法。这将要求您每次添加新用户时都添加一个新表。那永远不会发生。就像在C#中一样,您定义一个类,然后为每个对象创建该类的多个实例,因此,您在数据库中定义了一个表,该表定义了一个实体,然后该实体的每个实例由该表中的一行表示。您几乎永远不应该有两个具有相同模式的表,这样做的唯一合法理由就是一个是另一个的存档。
 

哮喘

会员
已加入
2014年10月11日
留言内容
7
编程经验
Beginner
我有一个新问题...我能够在内部连接示例的帮助下在mysql中完美地运行
C#:
"SELECT TitleAnime FROM WatchList INNER JOIN animelist ON WatchList.ControlNum = animelist.ControlNum WHERE WatchList.idnum = idnum"
但是,当我在C#上使用此查询时,它给我一个错误,告诉我没有数据库选择我的数据库名称是maindatabase,但是我不知道我将在查询中插入数据库名称的位置吗?

这是我的C#示例代码
C#:
void loadDB()
        {
            if (LogInScreen.welcomeuser != null)
            {

                string query = "SELECT animelist.TitleAnime FROM WatchList INNER JOIN animelist ON WatchList.ControlNum = animelist.ControlNum WHERE WatchList.idnum = idnum";


                using (MySqlConnection conn = new MySqlConnection(myConnection))
                {
                    conn.Open();

                    using (MySqlCommand cmd = new MySqlCommand(query, conn))
                    {
                        //cmd.Parameters.AddWithValue("?para", val);
                        try
                        {
                            sda = new MySqlDataAdapter();
                            sda.SelectCommand = cmd;
                            datset = new DataTable();
                            sda.Fill(datset);
                            bsource = new BindingSource();




                            bsource.DataSource = datset;
                            dataGridView1.DataSource = bsource;
                            DataGridViewColumn column = dataGridView1.Columns[0];
                            column.HeaderText = "Watchlist";
                            column.Width = 270;
                            sda.Update(datset);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("" + ex);
                        }
                    }
                    conn.Close();
                }
            }
        }
 
Last edited:

哮喘

会员
已加入
2014年10月11日
留言内容
7
编程经验
Beginner
好像我能够自己解决
C#:
string query = "SELECT TitleAnime FROM maindatabase.watchlist INNER JOIN maindatabase.animelist ON WatchList.ControlNum = animelist.ControlNum WHERE WatchList.idnum = idnum";
 

狂暴风暴

知名会员
已加入
2014年8月6日
留言内容
85
地点
南非鲁德普特
编程经验
10+
如果您有多个用户,每个用户都有自己的监视列表,则用户与电影表之间需要多对多的关系。

C#:
User table                Watchlist table           Movie table
+---------------+         +---------------+         +---------------+
| PKuserID      |-------->| FKuserID      |     +---| PKmovieID     |
+---------------+         +---------------+     |   +---------------+
| Username      |         | FKmovieID     |<----+   | Moviename     |
+---------------+         +---------------+         +---------------+

用户表
1 wim
2 piet
3克拉

电影桌
1个飞过杜鹃的巢穴
2墙
3一些喜欢它

监视表
1 1
1 2
2 3
3 1
3 3

C#:
select Username, Moviename
from users
join watchlist on PKuserID = FKuserID
join movies on PKmovieID = FKmovieID
where Username = 'wim'
这将为用户“ wim”提供监视列表中的所有电影。您可以将where子句更改为 电影名称=“有些喜欢它” 然后您就会将所有拥有该电影的用户列入其观看列表。
 

哮喘

会员
已加入
2014年10月11日
留言内容
7
编程经验
Beginner
另一个完美的例子是我向您致敬,您提供的代码可以在需要的时候用来过滤电影, 所有在观看列表中拥有该电影的用户。.再次感谢您的提示
 
最佳 底部