Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存储频繁添加/删除的列_Php_Mysql_Rdms - Fatal编程技术网

Php 存储频繁添加/删除的列

Php 存储频繁添加/删除的列,php,mysql,rdms,Php,Mysql,Rdms,我有两个想法来存储我的web应用程序的用户自定义/设置。可能有更多的方法可以做到这一点,我愿意接受新的想法 您建议使用哪种方法来存储可能不稳定更改的设置/自定义设置?例如,本周用户可以进行12种可能的定制。下周我们可能会在短时间内添加一个新的 因此,我可以: 将设置存储为列(user\u image\u url作为varchar,time\u offset作为int,background\u color作为varchar等),并将用户帐户作为主键。我不喜欢每当有新的设置(并且可能有几十个列)时就

我有两个想法来存储我的web应用程序的用户自定义/设置。可能有更多的方法可以做到这一点,我愿意接受新的想法

您建议使用哪种方法来存储可能不稳定更改的设置/自定义设置?例如,本周用户可以进行12种可能的定制。下周我们可能会在短时间内添加一个新的

因此,我可以:

  • 将设置存储为列(
    user\u image\u url
    作为varchar,
    time\u offset
    作为int,
    background\u color
    作为varchar等),并将用户帐户作为主键。我不喜欢每当有新的设置(并且可能有几十个列)时就必须添加另一个列的想法,但我认为这是最简单、最快、最明显的方法
  • 制作一个仅存储帐户ID、设置ID和设置值为varchar的表。因此,类似于
    (帐户id,设置id,值)值(1,2,'http://logos.com/yourlogo.png)
    。我们的想法是将它与存储
    设置id
    设置表连接起来。这样做的最大缺点(我可以看到)是每个设置都必须是相同的类型(varchar)。我不确定那以后会不会对我不利
  • 谢谢

    对于动态的“稀疏”值,第二个版本是存储这些值的可行方法。这称为实体属性值模型(EAV)。我发现它在混合安排中工作得很好(足够)。也就是说,每个用户有一条记录,所有或大多数用户共享大量公共信息。然后是带有特殊设置的单独表格

    EAV模型存在很多问题。对于大型数据集,性能可能是一个问题。表的大小要大得多,因为实体id和属性名(或id)在许多行中重复。然而,一些重要的系统,如Wordpress使用这种方法

    一个很大的优势是,您可以拥有超过4096个属性,而4096是MySQL的最大列数。我怀疑你会有那么多的设置,但如果有必要,你可以绕过这个限制(在许多其他数据库中,这个限制都比较低),这是很好的


    最后,您可以通过将多个列(通常是
    varchar
    float
    (某种类型)和
    datetime
    )与类型列一起使用来解决类型问题。这样,就可以直接存储值。如果您确实选择了
    varchar
    路径,请确保以YYYY-MM-DD的ISO格式存储日期(如果愿意,可以省略连字符)。

    选项1违反了关系数据库设计的第一种正常形式。选择2是最好的办法。网络上有很多关于第一范式的解释——这是我发现的最简单的解释:

    这在很大程度上取决于它们被添加或删除的频率;如果表足够大,添加和删除列可能需要一段时间。第二个选项也被称为EAV建模。是的,我在一些公司工作过,在那里很难添加列,你必须建立第二个数据库并进行切换。谢谢你的意见!我没有想到为不同的数据类型添加不同的列!这是一个好主意,可能会100%解决我的具体问题。谢谢