回答

收藏

数据库模型结构

技术问答 技术问答 233 人阅读 | 0 人回复 | 2023-09-14

我有一个专栏 组 。 群组
; g/ f" A. P) @* n: P具有存储在group_types中的不同类型(买方,卖方,裁判)。只有当该组是买方类型时,它才具有另一种(更专门)的类型,例如电气和机械类型。. r8 |# A! x$ a, G7 j. j6 y8 S4 y9 J1 |
我对如何将其存储在数据库中感到有些困惑。( j8 l' C. \0 G% ~/ w6 l6 J
有人可以建议我一个数据库结构吗?! q! H- i( d7 I& H/ ^$ J
谢谢6 N1 H. k' l0 J* T" _& Z# F& W
               
8 H6 D) g( `3 |+ F7 E% D" p$ y解决方案:  l8 O! k2 g3 C' ^! M, @
                + `9 ~5 ~& Q& Q; z6 Y

( A0 R, O- X* Q% S/ ~  g" M$ |/ Z/ F( a% I* ^8 w2 m7 }
                将您的存储group_types为层次结构表(带有nested sets或parent-child模型):
2 I) j2 ]2 x: u& d- jParent-child:
9 E: f! B, J+ d" ~( v* W3 ]typeid parent name
3 }& K2 [. J" N3 w1 Q3 Y( o1      0      Buyers
& I  p! {' c4 B1 D% P! m2      0      Sellers
( U4 Y) `) v  O6 P" P3      0      Referee
+ I/ E9 j3 \6 K3 W+ G. |/ }3 @  J4      1      Electrical2 b( v" ]  |7 ~( v' ?; T
5      1      Mechanic
( |" r2 d( i1 g% g2 C
& S) t, F! A8 h  I: jSELECT  *% N0 s/ }/ R' P) e+ W# p, x
FROM    mytable( Q- w5 d! x$ g
WHERE   group IN
6 E3 L0 _1 l8 X9 f6 P. t6 s+ ^        (
& |9 _0 X- b% I1 O        SELECT  typeid
. x6 d* g2 }& {! z! x1 ~        FROM    group_types
& f9 A) e7 c$ d        START WITH/ x. [5 f' i) w  @& N9 X- M7 J0 l
                typeid = 1$ Y& Q. k" P$ {5 [2 J2 X% |
        CONNECT BY# b3 h$ h2 s! l, _* V, ]4 Y% {
                parent = PRIOR typeid
* j7 k' _4 x+ Y- Z4 y2 f) g$ J4 z        )
/ w0 x  J" _( {: I2 H将选择中的所有买家Oracle。% d2 ^) W/ j1 u0 f% m/ P, C
Nested sets:
% s: y. w5 u6 Utypeid lower  upper  Name
, d0 K3 ?0 C' z5 I$ S( h$ b# ]1      1      2      Buyers! H- ^: ]2 m* Q1 B/ ~9 `' _
2      3      3      Sellers9 H1 ?1 |) t+ T
3      4      4      Referee
& D, u6 D, V, K6 F9 p4      1      1      Electrical
1 c$ t; J9 r. ~5      2      2      Mechanic
9 r& x) `' J+ s( a& l3 u4 J# H4 {5 D) k& ?/ y" `. d5 I7 }
SELECT  *. B  i& i. v5 e3 ?8 d7 a
FROM    group_types$ P+ h, i1 x% {5 j/ a( [
JOIN    mytable
( m4 v+ G) G5 V6 dON      group BETWEEN lower AND upper
8 E* _8 ?$ U8 E, p: oWHERE   typeid = 1
3 T" U7 L1 U  M+ ~# u" j将选择任何数据库中的所有买家。
3 [* {; Z( t/ D1 g. l. GNested sets如果您不需要层次结构上的排序或频繁更新,则可以在任何地方实现且性能更高group_types。
- p; t5 A* x; ?Parent-child可以轻松地在中实现,Oracle并且SQL
. d+ B3 X0 t+ J$ x! nServer只需花费一点点努力即可实现MySQL。它允许简单的结构更改和分层排序。: K/ o4 j9 r% O* v7 \$ H, C9 J
请参阅我的博客中有关如何实现该文章的文章MySQL:
9 T0 `. L* r' M) K1 d, h3 I中的分层查询MySQL& h  t) Z9 o3 J' f3 ?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则