2012-01-07 81 views
0

如果我有食品项目的列表,每一个“的课程领域”,它是有意义的文本(“主菜”)进入的过程中,或者我会得到更好的服务创建一个课程表,然后使用外键参考?这是课程和食物之间的一对多关系,但食物和课程之间的一对一关系是正确的?MySQL的优化表结构

感谢您的任何建议。

+0

你对“食物”的定义是什么?你对“课程”的定义是什么? – 2012-01-07 05:06:03

+0

“这是食物和食物之间的一对多关系,但食物和食物之间是一对一的关系”这是一个令人困惑的说法。 – 2012-01-07 05:18:27

回答

1

我曾经为所有东西创建单独的表格,但有时它比它的价值更麻烦。所以这取决于你的维护。如果你将要改变这些值,并且不希望要做一个巨大的,例如:如果你需要更改值

UPDATE tblFood SET course = 'Main Entree' WHERE course = 'Entree' 

,那么也许一个外部表是不是一个坏主意。问题出现在你需要查询数据库时......你需要内部或外部连接其他表。

DBA曾告诉我MSSQL在索引文本/ varchar值方面做了一件糟糕的工作,所以这就是为什么外部表方法诞生了......不知道我是否完全相信这一点,但同时他说MySQL在这方面做了更好的工作,并使查询更容易。

我敢肯定你会看到10个不同的原因,10个不同的答案,为什么你应该或不应该使用一个外部表,但很多时候它归结为您的特定需求是什么。希望这个对你有帮助。

+0

换句话说,查询信息有点困难,因为您必须使用JOIN语句,但更容易更新? – Apollo 2012-01-07 17:37:36

+0

确切地说,因为你很可能有一个整数或一个唯一的ID代表课程价值与价值本身。如果你认为tblCourse会有课程的名称加上可能是一个活跃的标志字段,也许是一个命令优先级(所以你可以订购课程),那么额外的表格可能是一种方式。如果在不久的将来它只是一个值而没有额外的字段,那么更新可能是一个挑战,但是如果你对更新语句感到满意,在做这样的更新之前做好系统备份,那么你应该对单表方法。 – 2012-01-09 04:07:21

0

我坚持1:M的课程和食物。如果是这种情况,我会为课程创建一个单独的表格,并为食物分开表格,并将course_id用作食物表上的外键。

无论如何,作为一个字符串进入课程仍然可以工作,但问题是,当你要做一个特定课程的更新,你仍然会去每个食品项目有该课程来更新它,有时一些餐馆可能最终会改变他们的课程可以是添加,编辑或删除课程。 :)