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

3

我希望创建一个DVD数据库(MySQL),其中包含自定义字段,这意味着用户应该能够添加自己的信息字段以编目他的DVD。我只提供所需的属性,例如:

 - ID
 - Title

用户可以添加自己使用的字段,例如:
- Actors
- Year
- Genre
- Plot
- etc

现在,对于这个问题有什么最佳实践呢?我有一些想法:

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

还有更好的建议吗?


看起来非常类似于这个:http://stackoverflow.com/questions/7814627/user-defined-fields-php-mysql - Dave R.
给他们一个独立的模式,让他们设计自己的表。 - Neil McGuigan
可能是重复的问题:如何设计数据库以允许用户定义模式 - Neil McGuigan
3个回答

3

我建议使用另一个表格来存储 dvd_id、field_name 和 value,以存储所有自定义字段。这样可以避免每次添加或删除新字段时都要修改表格。


0

你应该尝试使用MySQL 5.7及其JSON数据类型

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

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

0
如果我要完成这个任务,我会创建一个类似下面的布局:
电影 move_id | 标题
电影属性 movie_id | attribute_id
属性 attribute_id | 名称 | 值
这样,你可以通过使用联接语句来获取与电影ID相关的所有属性和值。希望我理解了你的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接