在建立資料庫是,以空間換時間應該怎麼理解呢,
舉例:建設你要建立乙個商品的資料庫,
肯定要有乙個商品表goods,這個商品有喝多宣傳,
那肯定還要有乙個表goods_image表,而且乙個
商品可以對應很多,所以是一對多的關係:
但是這個商品有乙個主宣傳,那麼如果將主
宣傳也新增到goods_image的表裡,就會增
加跨表搜尋,所以可以考慮在goods表中增加一
個字段index_image_url用來儲存主宣傳的圖
片,雖然增加了goods的大小,但是減少了搜尋
的時間。
另外你的商品可能配套不同的小禮品,所以
還需要乙個禮品表gift,乙個商品可以有不同的
禮品,乙個禮品也可能對應不同的商品,所以這
是乙個多對多的關係。
為了方便索引,建立乙個goods_gift的表,
goods_id和gift_id作為聯合主鍵。
用flask實現一下:
# -*- coding:utf-8 -*-
# author: json_steve
# 專案啟動入口
from flask import flask
from flask_script import manager
from flask_sqlalchemy import sqlalchemy
from flask_migrate import migratecommand, migrate
class
config
(object):
"""配置類"""
debug = true
# 資料庫配置
sqlalchemy_database_uri = "mysql:"
sqlalchemy_track_modifications = false
sqlalchemy_echo = true
# 整合資料庫遷移
# 關聯app和db
# manage增加命令
manage.add_command('db', migratecommand)
good_gift = db.table(
"flask_good_gift",
db.column("good_id", db.integer, db.foreignkey("flask_review_goods.id"), primary_key=true), # 房屋編號
db.column("gift_id", db.integer, db.foreignkey("flask_review_gift.id"), primary_key=true) # 設施編號
)class
goods
(db.model):
"""產品"""
__tablename__ = "flask_review_goods"
id = db.column(db.integer, primary_key=true)
index_image_url = db.column(db.string(256), default="")
gift = db.relationship("gift", secondary=good_gift)
images = db.relationship("goodsimages")
class
goodsimages
(db.model):
""""""
__tablename__ = 'flask_review_images'
id = db.column(db.integer, primary_key=true)
image_url = db.column(db.string(256), default='')
good_id = db.column(db.integer, db.foreignkey("flask_review_goods.id"), nullable=false)
class
gift
(db.model):
"""禮品"""
__tablename__ = 'flask_review_gift'
id = db.column(db.integer, primary_key=true)
name = db.column(db.string(32), nullable=false)
defindex
():return
'index'
if __name__ == '__main__':
manage.run()
如果有多個檔案,注意flask的迴圈匯入問題,(所以我都放在了乙個檔案了),在建立模型類的時候,一般一對多的關係,一的表裡是relationship方便查詢,多的表裡是外來鍵建表。 以空間換時間經典演算法
以前看過一篇文章 優化c 常用的幾招 作者提到的第一招就是 以空間換時間 還舉了乙個例子,由於比較經典,引用一下 電腦程式中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程式的效率問題,我們就有了解決問題的第1招 以空間換時間。比如說字串的賦值 方法a 通常的辦法 define l...
以空間換時間的計數排序
我們前面學習的插入 歸併 堆和快速排序都是比較排序,即在排序的最終結果中,各元素的次序依賴於它們之間的比較。我們說過比較排序有時間下界,即nlgn,如果我們需要乙個時間複雜度為o n 的排序演算法,要怎麼辦?計數排序就是比較好的選擇。計數排序的基本思想是 對每乙個輸入的元素x,確定小於x的元素個數。...
劍指offer 以空間換時間練習
1 題目要求 我們把只包含因子2 3 5的數稱作醜數,求按從小到大的順序的第1500個醜數。例如,6 8都是醜數,但14不是,因為它包含因子7.習慣上我們把1當做第乙個醜數。2 題目分析 方法一 首先,我們再來仔細分析一下醜數的概念,因為2,3,5是醜數的因子,那麼就可以說明任意乙個醜數對其中乙個因...