有"文章","新闻"表。我想允许管理员在创建新文章或新闻时添加关键字和描述等元标记。我使用了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
我的问题:
有比这两种方法更好的方法吗? 哪种方法更好?
用户应该能够编辑文章和说明以及文章或新闻。
答案 0 :(得分:0)
将表名放在一列中将不允许您创建外键关系,这将使一切都搞乱。使用正确的外键创建news_attributes和article_attributes表。
meta_type不应该是字符串。如果您具有多种类型的属性之一,请将类型存储在单独的表中,并使用整数外键链接它们。这些很可能是常量,无论如何都要在你的php代码中进行硬编码,那么为什么要使用较慢的字符串呢?
现在,第二种方法是规范化且SQL友好的,因为使用INSERT和DELETE可以轻松地添加/删除关键字。这真的是要走的路。
在列中存储以逗号分隔的关键字的唯一优势是能够在其上放置FULLTEXT索引。这是唯一可以接受的情况。