【问题标题】:Dynamic Database table attributes (best practice)动态数据库表属性(最佳实践)
【发布时间】:2012-08-11 23:57:28
【问题描述】:

我想创建一个带有自定义字段的 DVD 数据库 (MySQL),这意味着用户应该能够添加自己的信息字段来对他的 DVD 进行编目。我只是提供了所需的属性,例如:

 - ID
 - Title

用户可以添加自己使用的字段,例如

- Actors
- Year
- Genre
- Plot
- etc

现在,应对这一挑战的最佳做法是什么?我有一些想法:

  1. 更改表格并添加属性(可能会丢失数据)
  2. 使用临时表(性能较差)

有更好的主意吗?

【问题讨论】:

标签: php mysql dynamic database-design


【解决方案1】:

我会使用另一个包含 dvd_id、field_name、value 的表并将您的所有自定义字段存储在那里。这使您不必在每次添加或删除新字段时都更改表格。

【讨论】:

    【解决方案2】:

    您应该试用 MySQL 5.7 及其 JSON data type

    您可以使用它来定义用户定义属性的半结构化集合。

    CREATE TABLE Dvd (
      id SERIAL PRIMARY KEY,
      title text NOT NULL,
      attr JSON NOT NULL
    );
    
    INSERT INTO Dvd
    SET title = 'Wonder Woman', 
        attr = '{"Actors": ["Gal Godot", "Chris Pine"],
                 "Year": "2017",
                 "Genre": "Action",
                 "Plot": "See Captain America: The First Avenger"
                }';
    

    【讨论】:

      【解决方案3】:

      如果我要完成这项任务,我会做出类似的布局

      电影 move_id |标题

      movie_has_attribute 电影ID |属性id

      属性 属性 ID |姓名 |价值

      这样,您可以使用 join 语句通过 movie_id 获取所有属性和值。我希望你的问题是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-04
        • 2012-09-16
        • 1970-01-01
        相关资源
        最近更新 更多