如果乙個物件有1000 以上的屬性,那麼應該如何安排資料表規畫?

時間 2021-05-31 18:32:34

1樓:安曉輝

任何乙個物件都是由其它小物件組成的,所以,這個物件一定對外有它作為整體的重要特徵,把這些提煉出來,放在一起。而外面看不到的,冰山之下的,分層處理,懶載入。分層時根據小物件(小系統)來聚合某些屬性。

2樓:老年性CACZ

業務提出需求要在乙個頁面中查詢各種資料

畏懼查表的時候多表join的龜速,我們用的是乙個表多個欄位mysql innodb引擎支援最大字段上線為1017myisam引擎最大字段上限為2410

實際上還是趕不上業務需求,最後還是多表join,慢得要死當然,單錶我們沒有用到那麼多欄位,幾百吧

也不知道利弊如何。@蘿魏紫

3樓:

切記第三正規化是底線

這是個很好的資料結構的問題,首先這種情況很少,會出現單一資料有同層級的1000個屬性,比如人的自然屬性,顯然不可能,必定能夠分層。其次我們假設這真的存在,不一定是人,總之乙個實體存在A1到A1000個相同層級屬性,並且這些屬性不可再分。那麼我們要設計這個表。

第一,考慮必有屬性和非必有屬性,必有屬性必然存在,必須儲存,這個部分,無論你如何取巧,必然繞不過,二非必有屬性,就可以省略,在這個基礎上,你的方案1和2應當結合。乙個表,作為必有屬性,每個欄位為乙個屬性。另外乙個表以前表主鍵為外來鍵,按行儲存nullable屬性,這樣只有有屬性才會儲存。

第二,進一步考慮資料使用頻度,某些資料會經常使用,某些資料會不經常使用,有些資料會被組合使用,有些資料常常單獨存在,在這種情況下,為了查詢速度,進行快取表設計,可以採取檢視快取表並存的方式來設計。

第三,進一步考慮資料量極大的情況,這時候需要設計資料分割槽

第四,再進一步考慮資料讀寫有併發的情況,雖然主流資料庫都有一定程度支援,但是原生資料結構更支援的話,顯然會更好,這時候需要設計分庫

很少在知乎上看到真的有資料結構和架構的問題,看到這個問題,很欣慰。

4樓:法蘭克斯雪諾

個人比較傾向於第一種方案

這樣IO會比較快

有的資料讀寫不頻繁,有的資料讀寫頻繁,如果做在乙個表裡,肯定會降低效率

第二種方案不推薦,我也沒看出來有啥優點。。。(可能比較簡單易懂是唯一的優點吧)

至於你說的擴充性,這不是問題吧,直接加,然後在原始碼中增加相應的邏輯不就行了?

不過我不是搞資料庫的,我是用xml來儲存資料,也沒達到你這個規模

如果遇到的物件有乙個難忘的初戀,是隨便找個人結婚的想法怎麼辦?要怎麼避免?

乙個忘不了初戀的人更不可能會去隨便找個人結婚。因為初戀的美好導致他的底線很高,要求多,擁有過就會希望再次得到,而且是迫切的希望。但是一模一樣感情很難再找到,這種時候以前的回憶就會更加難以忘懷。這樣的人一旦遇到自己覺得不錯的,一定會窮追猛打,讓你覺得自己被深深喜歡。所以等你發現他有忘不了的初戀的時候,...

如果1000個人合謀用凌遲的方法殺死乙個人,那麼他們應該分別受到何種判決?

海屋添籌 為什麼這一千人要這樣做呢?如果是因為取樂,那按簡單的故意殺人罪共犯處理即可。如果不是,1000個人對乙個人的不凌遲不足以平民憤的殺人,法官錘恐怕真要掂量一下,還好題主說的不是一千萬人合謀那和誅董卓有的一拼。假如是乙個億那沒準還能因此多個節日。假如這一千人還掌握立法權或特赦權那就更了不得。題...

腦洞了乙個英雄,如果出現在LOL屬什麼級別的英雄?

公尺腸湯飯 我也腦洞了一下,給你重做了 無藍量消耗能量 p 標記被傷害的英雄單位和野怪。攻擊被標記的單位回覆能量,並提公升15 的傷害。q 迴旋雙刃 指向性技能 專注射擊 迴旋雙刃 對敵方單位扔出兩道迴旋刃 彈道和加里奧的q一樣 擊中後返回,並對沿途的敵方單位造成傷害。專注射擊 攻速降低至0.85,...