gpt4 book ai didi

MYSQL 和规范化 : How to handle lots of optional fields?

转载 作者:可可西里 更新时间:2023-11-01 07:35:45 26 4
gpt4 key购买 nike

我有一个个人资料页面,上面有大约 20 个可选字段。为了保持规范化,我必须创建 20 个不同的表,然后使用其中的 20 个 JOINS 进行查询。这对我来说似乎有点过头了。

这是最好的方法吗?

你建议我保持正常化吗?

最佳答案

执行此操作的一个好方法(尽管有点令人困惑,除非您知道发生了什么)是使用与 wordpress 相同的设计 - 据我记得它被称为实体属性值(感谢@Matt Fenwick)。 https://stackoverflow.com/tags/eav/info

基本想法是,您有两个表,而不是您的 20 个 INNER JOIN 表来存储零碎的东西。一个存储你的实体(在 wordpress 的情况下是一个帖子),第二个存储你所有的零碎 - 或者 WP 引用它的元数据。您没有为每个数据点设置一列,而是有一列用于名称,一列用于值,一列用于此属性适用的实体的 ID。

通过这种方式,您可以节省大量的 SQL、扩展过程中的麻烦以及开始构建它所需的时间。如果您需要满足另一个属性,您只需将它与其他属性一起塞进去 - 无需修改架构。

关于 WP 数据库布局的更多细节(这里我主要考虑 wp_posts 和 wp_postmeta 表):http://codex.wordpress.org/Database_Description

所以一个例子可能是(伪代码,抱歉):

table: yourEntity
entityID int, primary key, auto increment
title varchar

table: yourEntityMeta
entityID int, non-unique key
name text
value text

通过这种方式,您可以为每个实体拥有任意数量的属性,而不会对具有 NULL 值的未使用列和需要连接的 18 个以上的表没有任何限制或性能问题。

希望对你有帮助

注意:一个问题(@ypercube 在评论中指出)是使用这意味着您不能为每个属性指定数据类型,即日期属性将存储为文本, bool 值也是如此或诠释。您也无法使用外键链接到有效值表(感谢@Catcall)。在走这条路之前,您需要仔细考虑这一点。

关于MYSQL 和规范化 : How to handle lots of optional fields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10193121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com