gpt4 book ai didi

mysql - 针对几列重复数据的关系数据库设计

转载 作者:行者123 更新时间:2023-11-29 11:25:29 25 4
gpt4 key购买 nike

这是我正在使用的数据类型:有电子邮件 ID、年龄等用户数据:

还有应用程序特定的设置数据(不透明度、速度、音量等),它们有默认值,但用户可以自由更改默认值并根据自己的需求自定义应用程序。

我希望能够选择更改现有用户的默认值,而无需在用户表中针对每个用户进行更改。

采取什么好方法?

  1. 我是否应该将所有数据以及包含默认值和名为 default_settings 的标志的配置文件放在一个表中(是/否)。
Table: USERS

user_data_1|user_data_2| ... |setting_1|setting_2| ... |default_settings
  • 或者我应该将所有用户数据放在一个表中,并将其链接到另一个表上的相应设置数据,其中设置表的第一行包含默认值。没有设置分类。要么是默认设置,要么是一组自定义值
  • Table: USERS

    user_data_1|user_data_2| ... |setting_id

    Table: SETTINGS

    setting_id|setting_1|setting_2| ...

    谢谢。

    最佳答案

    您的第一个设计更具相关性。每个设置都属于自己的列,具有适当的列名称、数据类型和DEFAULT。我认为没有必要添加最后一列 default_settings。每列要么具有 DEFAULT 值,要么具有非默认值。

    但是,该设计有一个缺点,即每当您需要引入新设置时,都需要使用 ALTER TABLE 添加新列。并且表中的列数存在实际限制。可能存在多值设置,很难在单列中建模。

    我经常看到的用户设置是引用第一个表的第二个表。每个用户在第二个表中都有许多行,每个设置一行:

    Table USERS
    user_data_1|user_data_2| ...

    Table SETTINGS
    user_id|setting_name|setting_value

    此设计允许每个用户启用无限数量的新设置,只需插入新行,无需 ALTER TABLE 添加新列。

    默认值保留在应用程序代码中。也就是说,对于每个设置,如果给定用户的数据库中不存在该设置,则应用程序代码将采用合理的默认值。

    这个设置表基本上是一个“键值”存储,它有不同的问题:

    • 每个设置名称都以冗余方式存储在行中,而不是作为列标题。设置名称的拼写可能会变得不一致,例如“颜色”与“颜色”。
    • 您必须为设置值选择支持任何设置的数据类型,因此您将失去 SQL 对强制执行数字或日期格式的支持。 IE。一切都变成了字符串。
    • 您将无法在列定义中存储DEFAULT
    • 您将无法使用 NOT NULLUNIQUEFOREIGN KEY 等 SQL 约束。

    尽管如此,这种模式在这种情况下仍然很受欢迎。

    关于mysql - 针对几列重复数据的关系数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38296331/

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