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

时间:2012-08-11 23:57:29

标签: php mysql dynamic database-design

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

 - ID
 - Title

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

- Actors
- Year
- Genre
- Plot
- etc

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

  1. 更改表格并添加属性(可能的数据丢失)
  2. 使用临时表(性能较差)
  3. 有更好的主意吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如果我要做那个任务,我会做一个像

这样的布局

电影 move_id |标题

movie_has_attribute movie_id | attribute_id

属性 attribute_id |名字|值

这样你可以通过movie_id获取join语句的所有属性和值。我希望我的问题是对的。

答案 2 :(得分:0)

你应该试试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"
            }';