在Mysql(Laravel)中哪种方法更好地存储元数据(关键字和描述)?

时间:2017-03-31 10:39:37

标签: mysql laravel metadata meta-tags

有"文章","新闻"表。我想允许管理员在创建新文章或新闻时添加关键字和描述等元标记。我使用了laravel Polymorphic Relations并且有两种方法可以实现:

方法1

meta_data表:

id   metable_type   metable_id    meta_type      meta_content

1    news           4             description    php is a good...
2    articles       7             keywords       laravel,relation,tag
3    articles       2             keywords       php,developer,html

方法2

meta_data表:

id   metable_type   metable_id    meta_type      meta_content

1    news           4             description    php is a good...
2    articles       7             keyword        laravel
2    articles       7             keyword        relation
2    articles       7             keyword        tag
3    articles       2             keyword       php
3    articles       2             keyword       developer
3    articles       2             keyword       html

我的问题:

有比这两种方法更好的方法吗? 哪种方法更好?

用户应该能够编辑文章和说明以及文章或新闻。

1 个答案:

答案 0 :(得分:0)

将表名放在一列中将不允许您创建外键关系,这将使一切都搞乱。使用正确的外键创建news_attributes和article_attributes表。

meta_type不应该是字符串。如果您具有多种类型的属性之一,请将类型存储在单独的表中,并使用整数外键链接它们。这些很可能是常量,无论如何都要在你的php代码中进行硬编码,那么为什么要使用较慢的字符串呢?

现在,第二种方法是规范化且SQL友好的,因为使用INSERT和DELETE可以轻松地添加/删除关键字。这真的是要走的路。

在列中存储以逗号分隔的关键字的唯一优势是能够在其上放置FULLTEXT索引。这是唯一可以接受的情况。