以時間換空間,聯合主鍵 舉例

2021-08-14 08:32:59 字數 2528 閱讀 2017

在建立資料庫是,以空間換時間應該怎麼理解呢,

舉例:建設你要建立乙個商品的資料庫,

肯定要有乙個商品表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是醜數的因子,那麼就可以說明任意乙個醜數對其中乙個因...