在MySQL表中存储可扩展选项列表?最佳实践?

时间:2010-09-28 21:07:46

标签: mysql data-structures

假设我们有多站点CMS,并且此CMS中的每个网站都有2个选项:preview_width和preview_height。我们知道,如果用户没有定义,每个选项都应该有默认值。我们也知道,选项列表将在不久的将来得到扩展。在MySQL表中存储这些选项的最佳实践是什么?

我知道三种做法,而且两种做法都缺乏(或者我可能不知道如何正确使用这种做法)......

  1. 练习#1:每个选项都是 表示为options中的列 表。

    缺点:我们应该 每次修改options表 我们正在添加新选项。

  2. 练习#2:存储所有选项 作为序列化对象/数组 站点表的选项列。

    缺点:添加新选项 默认值 - 我们需要循环 通过所有行和修改 序列化选项;或者我们可以添加 请求此选项时 发现不存在。

  3. 练习#3:存储所有选项 在带有结构的选项表中:id, site_id,option_name,option_value。

    缺点:添加新选项时,我们应该使用每个网站的默认值选项更新此表。

  4. 你有什么选择? 在经常添加新选项时选择什么做法? 还有其他做法吗?

    谢谢。

1 个答案:

答案 0 :(得分:0)

我会使用练习#3。为了存储默认值,您可以尝试编写方法来获取选项:

get_value(option) {
  value = read_from_db(option);
  if value == not_present_in_db {
    value = default_value(option);
  }
  return value;
}

您还需要编写default_value(option)方法,该方法应在配置文件中查找某些默认值或其他内容。