2012-12-20 37 views
1

我有一個人表,我希望用戶能夠創建自定義多對多信息關係。教育,住宅,就業,語言等等。這些可能需要不同數量的列。例如。MySQL數據庫與用戶創建表與自定義列號

Person_languages(person_fk,language_fk) 
Person_Educations(person,institution,degree,field,start,end) 

我想到了這樣的事情。 (不正確的SQL)

create Tables(
      table_id PRIMARY_KEY, 
      table_name_fk FOREIGN_KEY(Table_name), 
      person_fk FOREIGN_KEY(Person), 
      table_description TEXT 
      ) 

表拿着所有的自定義表的名稱和說明

create Table_columns(
        column_id PRIMARY_KEY, 
        table_fk FOREIGN_KEY(Tables), 
        column_name_fk FOREIGN_KEY(Columns), 
        rank_column INT, 
        ) 

顯示在表抱着列在每個自定義表和它們的順序。

create Table_rows(
        row_id PRIMARY_KEY, 
        table_fk FOREIGN_KEY(Tables), 
        row_nr INT, 
       ) 

保存每個自定義表的行的表。

create Table_cells(
        cell_id PRIMARY_KEY, 
        table_fk FOREIGN_KEY(Tables), 
        row_fk FOREIGN_KEY(Table_rows), 
        column_fk FOREIGN_KEY(Table_columns), 
        cell_content_type_fk FOREIGN_KEY(Content_types), 
        cell_object_id INT, 
       ) 

Table holding cell info。

如果任何自定義表格開始被大多數人使用並變得很大,那麼想法可能會將其提取到一個單獨的硬編碼多對多表格中。

這是一個愚蠢的想法?有一個更好的方法嗎?

回答

2

我強烈建議不要這樣的設計 - 你正走在一個極度分散和難以閱讀的設計之路上。

IIUC你的基本問題是,你有一個共同的(通用)屬性爲一個人,可以擴展其他(非通用)屬性。

我想通過在人臺具有普適性解決這一點,並創建兩個表:property_types,翻譯屬性名稱爲INT主鍵和person_properties,結合人PK,PK歡迎使用屬性和價值。

如果您將此表的PK設置爲(person,property),那麼您將獲得該人的最佳索引位置,這使得爲某人請求所有屬性的查詢速度非常快。

+0

+1這裏是一個教學故事:http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ –

相關問題