sql db design suggestions by Svavar Kjarrval
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Fri, 10 Feb 2012 23:38:21 +0000 (00:38 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Sat, 11 Feb 2012 11:11:51 +0000 (12:11 +0100)
Many thanks go to Svavar Kjarrval who has taken a deeper
look at our current sql db design and made a bunch of
suggestions.  The suggestions are currently put as TODO
items in the docstrings.  This way we can keep track of
them directly where we need it.

mediagoblin/db/sql/models.py

index 36f94b250f794d2bc106fadb89db050260ea9f6d..9d06f79cb768aac96d9f5ec455b6243f05b9981d 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+"""
+TODO: indexes on foreignkeys, where useful.
+"""
+
 
 import datetime
 
@@ -43,6 +47,10 @@ class SimpleFieldAlias(object):
 
 
 class User(Base, UserMixin):
+    """
+    TODO: We should consider moving some rarely used fields
+    into some sort of "shadow" table.
+    """
     __tablename__ = "users"
 
     id = Column(Integer, primary_key=True)
@@ -67,6 +75,9 @@ class User(Base, UserMixin):
 
 
 class MediaEntry(Base, MediaEntryMixin):
+    """
+    TODO: Consider fetching the media_files using join
+    """
     __tablename__ = "media_entries"
 
     id = Column(Integer, primary_key=True)
@@ -145,6 +156,10 @@ class MediaEntry(Base, MediaEntryMixin):
 
 
 class MediaFile(Base):
+    """
+    TODO: Highly consider moving "name" into a new table.
+    TODO: Consider preloading said table in software
+    """
     __tablename__ = "mediafiles"
 
     media_entry = Column(
@@ -221,12 +236,20 @@ class MediaComment(Base):
     _id = SimpleFieldAlias("id")
 
 
-def show_table_init():
+def show_table_init(engine_uri):
+    if engine_uri is None:
+        engine_uri = 'sqlite:///:memory:'
     from sqlalchemy import create_engine
-    engine = create_engine('sqlite:///:memory:', echo=True)
+    engine = create_engine(engine_uri, echo=True)
 
     Base.metadata.create_all(engine)
 
 
 if __name__ == '__main__':
-    show_table_init()
+    from sys import argv
+    print repr(argv)
+    if len(argv) == 2:
+        uri = argv[1]
+    else:
+        uri = None
+    show_table_init(uri)