Php 选择不同的或单独的标准化表?

Php 选择不同的或单独的标准化表?,php,mysql,sql,normalization,Php,Mysql,Sql,Normalization,我们现在正在制定计划,所以在我开始进步之前,我想确保我以最好的方式处理事情 我们有一个products表,我们在其中添加了一个名为“format”的新字段,它将是产品袋、盒子等的结构。没有设置值,用户可以在该字段中输入任何他们喜欢的内容,但是我们希望显示用户已输入的所有格式的下拉列表 我可以想到两种方法来实现这一点:要么在products表上选择一个基本的DISTINCT,以获得用户已经填写的所有格式;或一个单独的表,用于存储格式并由产品链接到 出于本能,我喜欢使用SELECT DISTINCT

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

我们有一个products表,我们在其中添加了一个名为“format”的新字段,它将是产品袋、盒子等的结构。没有设置值,用户可以在该字段中输入任何他们喜欢的内容,但是我们希望显示用户已输入的所有格式的下拉列表

我可以想到两种方法来实现这一点:要么在products表上选择一个基本的DISTINCT,以获得用户已经填写的所有格式;或一个单独的表,用于存储格式并由产品链接到


出于本能,我喜欢使用SELECT DISTINCT,因为它会让我的生活更轻松。但是,假设一张包含10亿种产品的表格,哪种方式是最好的方式?

既然您允许用户输入他们想要的任何内容,我会选择第二个选项

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

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


另外,保持一致,或者每个单词只有第一个大写字母。

因为您允许用户输入他们想要的内容,所以我选择第二个选项

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

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


另外,保持一致,或者每个单词只有第一个大写字母。

如果要添加约束,我想我会选择第二个选项附加表+外键,仅仅是因为数量的原因,也因为您可以拥有将合并类似产品表单的管理。

如果您想添加约束,我想我会选择第二个选项附加表+外键,这仅仅是因为数量的原因,也因为您可以进行管理,例如合并类似的产品表单。

如果您决定将所有内容都保存在一个表中,那么就在该列上建立一个索引。这将加快在用户应用程序中创建列表的过程

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

另一方面,通常当用户从应用程序中的下拉框中选择内容时,这些内容是实体的极好示例,这就是表要存储的内容


最后,我要说的是,在开发应用程序时做最方便的事情。当您更接近于完成它时,考虑将这些东西存储在一个单独的表中是否更好。其中一个大问题是,即使当前没有用户定义了所有格式,您是否希望了解所有已使用的格式。

如果您决定将所有格式都保存在一个表中,请在列上建立索引。这将加快在用户应用程序中创建列表的过程

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

另一方面,通常当用户从应用程序中的下拉框中选择内容时,这些内容是实体的极好示例,这就是表要存储的内容


最后,我要说的是,在开发应用程序时做最方便的事情。当您更接近于完成它时,考虑将这些东西存储在一个单独的表中是否更好。其中一个大问题是,即使当前没有用户定义所有格式,您是否希望了解所有已使用的格式。

在90%的情况下使用DISTINCT意味着您犯了错误。我并不是说它是无用的,但它是错误查询或计划的完美指示器,在90%的情况下,这意味着你犯了错误。我并不是说它没用,但它是错误查询或SchemaGrate答案的完美指示器,这与我的想法基本一致。我认为将格式存储在一个单独的表中是“更正确”的方法,但其好处似乎并不值得额外的工作。最后我选择了独特的。谢谢回答得很好,和我想的差不多。我认为将格式存储在一个单独的表中是“更正确”的方法,但其好处似乎并不值得额外的工作。最后我选择了独特的。谢谢