[英]mysql create post and store images & paragraphs in single table or multiple table
我嘗試建立一個包含圖像和段落的文章頁面。
我的問題是我應該為圖像和段落創建2個表格嗎?
或創建一個表並將圖像和段落存儲在一個列中?
*(圖片和段落從上到下的順序)
//文章表
id title
1 first post
// image表(易於輸出,但是db會很大)
id article_id src
1 1 abc.jpg
//段落表
id article_id text
1 1 this is first paragraph...
//文章表
id content
1 <p>feff.....</p><img... /><p>efefef</p><img.../>
您的第一種方法的問題在於它沒有順序的概念。 除非您只有一個圖像和一個段落以特定順序排列,否則無法保證正確的順序。 完成這些任務的一種更好的方法是將有類似articles
和article_contents
。
//文章
id, title
// article_contents
id, article_id, content_type, body, order
我想您也可能沒有order
字段,而是依靠自動增量ID,但是我認為最好對這些內容更明確。
因此,在渲染模板時,您可以執行類似操作。 (這都是偽代碼)
<h1>
<?= $article->title; ?>
</h1>
<?php
foreach($article->content as $content) {
// this would be better as a class constant
if ($content->content_type === 'image') {
// have a class to handle rendering of images
echo \Content\Image::render($content->body);
}
if ($content->content_type === 'paragraph') {
// have a class to handle rendering of content, this output will likely need to be purified (see below)
echo \Content\Paragraph::render($content->body);
}
}
?>
有很多方法可以做到。
您提到的另一個選項確實有問題,但是您可以通過兩種方式之一來處理XSS問題。
基於評論的更新:
關於您的第一條評論,如果ID位於兩個單獨的表中,則不能依賴ID,它可能會起作用,但這是一個非常脆弱的解決方案,沒有提供我能想到的任何好處。
至於凈化src標記,您只需配置HTMLpurifier即可驗證src標記,從外觀上,您可以使用指令Core.RemoveInvalidImg
。 HTMLPuirifier內置了很多這些選項,功能非常強大。 有關更多選項/文檔,請參見下面的鏈接。
https://github.com/GordonLesti/Lesti_Blog/tree/master/lib/HTMLPurifier/ConfigSchema/schema
http://htmlpurifier.org/docs/enduser-customize.html
進一步更新:
關於性能。 這就是所謂的“要解決的好問題”。
選擇文章時,您可以緩存結果HTML並將其提供,當數據不經常更改時,無需打擾數據庫。
插入新文章時,您只需要等待並圍繞它構建即可。 您可以執行諸如更新UI和異步更新數據庫之類的操作。 讓用戶了解最新信息,這是最重要的。
更新文章時,請不要忘記使緩存無效。
最主要的是, 這不是您現在需要考慮的真正問題 。 現在,請放入一個緩存層,當您達到SO的大小時,您可以聘請專業人士來處理這種瘋狂的事情。 請參閱下面的鏈接,這非常有趣。
http://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.