Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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_Dynamic_Database Design - Fatal编程技术网

Php 动态数据库表属性(最佳实践)

Php 动态数据库表属性(最佳实践),php,mysql,dynamic,database-design,Php,Mysql,Dynamic,Database Design,我想创建一个带有自定义字段的DVD数据库(MySQL),这意味着用户应该能够添加自己的信息字段来对DVD进行编目。我只提供所需的属性,例如: - ID - Title 用户可以添加字段供自己使用,如 - Actors - Year - Genre - Plot - etc 现在,这项挑战的最佳实践是什么?我有一些想法: 更改表并添加属性(可能会丢失数据) 使用临时表(性能较差) 有更好的办法吗?我会使用另一个包含dvd\u id、字段名称、值的表,并将所有自定义字段存储在那里。这使您不必

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

 - ID
 - Title
用户可以添加字段供自己使用,如

- Actors
- Year
- Genre
- Plot
- etc
现在,这项挑战的最佳实践是什么?我有一些想法:

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

  • 有更好的办法吗?

    我会使用另一个包含dvd\u id、字段名称、值的表,并将所有自定义字段存储在那里。这使您不必在每次添加或删除新字段时都更改表。

    如果我要执行此任务,我会制作如下布局

    电影 移动| id |标题

    电影有属性 电影| id |属性|id

    属性 属性| id |名称|值


    这样,您就可以通过join语句通过movie_id获得所有属性和值。我希望我没有弄错你的问题。

    你应该试试MySQL 5.7及其应用程序

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

    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"
                }';
    

    看起来很像这样:给他们自己的模式,让他们设计自己的表