SELECT DISTINCT还是单独的规范化表?

时间:2012-05-25 21:44:44

标签: php mysql sql normalization

我们现在正在制定计划,所以在我开始进步之前,我想确保以最好的方式处理事情。

我们有一个产品表,我们正在添加一个名为'format'的新字段,它将是产品的结构(包,盒等)。没有设置值,用户可以在该字段中输入他们喜欢的内容,但是我们希望显示用户已输入的所有格式的下拉列表。

我可以通过两种方式来做到这一点:在产品表上使用基本的SELECT DISTINCT来获取用户已经填写的所有格式;或单独的表格,用于存储格式并由产品链接。

本能地,我想使用SELECT DISTINCT,因为它会让我的生活更轻松。但是,假设一个十亿种产品的表,这将是最好的方式吗?

3 个答案:

答案 0 :(得分:2)

我想我会选择第二个选项(如果你想添加约束,可以选择附加表+外键),这只是因为你可以拥有合并类似产品形式的管理,例如。

答案 1 :(得分:1)

如果您决定将所有内容保存在一个表中,请在列上构建索引。这应该加快在用户应用程序中创建列表的处理速度。

我有点不确定哪种方法最好。通常,在设计用户界面时,您希望尝试不同的东西。必须进行数据库更改会妨碍构建应用程序的创作过程。

另一方面,通常当用户从应用程序的下拉框中选择东西时,这些"东西"是"实体的优秀例子" - 这就是表格要存储的内容。

最后,我会说在开发应用程序时做最方便的事情。当您接近最终确定它时,请考虑将这些内容存储在单独的表中是否更好。其中一个重要问题是,您是否想要了解所有已使用过的格式,即使当前没有用户定义过这些格式。

答案 2 :(得分:0)

由于您允许用户输入他们想要的任何内容,我会使用第二个选项。

创建一个新表并在其中插入所有新的“格式”并链接到产品表。

确保在创建代码时添加用户输入的格式,检查数据库中是否有相同的值,这样您也不需要区分它们。

此外,通过只使用每个单词的第一个字母upprcase来保持一致。