多对多桌子还是一张桌子?

时间:2020-05-12 15:19:33

标签: mysql sql

我怀疑这两种方法中哪种方法更有效,

让我们假设我有一个针对每个用户的数据库,每个用户可能有很多商店,所以我有一个表CONFIG,其中包含诸如SHOP_CONFIG(商店的编号)和POS_CONFIG( POS的ID)一家商店可以拥有多个POS

然后我有一个带有ITEMS的表,这些表属于属于ID_ITEMS DESC_ITEMS等列的商店, 每个POS中的每个SHOP的项目都可以相同,或者每个POS可以具有不同的ITEMS。所以现在我必须查看每个SHOP / POS

的所有项目

所以我的疑问是:

我应该在ID上添加CONFIG,然后用SHOP_ITEMS的{​​{1}}作为外键,用{{1 }}作为外键?

还是我可以将IDCONFIG列添加到ID_ITEMS表中?

(表SHOP仍用于其他目的)

1 个答案:

答案 0 :(得分:1)

一个更长的例子,但是您可以根据您的项目进行调整。


-- Shop owner (user) OWN exists.
--
owner {OWN}
   PK {OWN}
-- Owner OWN owns shop number SHP# (of that owner).
--
shop {OWN, SHP#}
  PK {OWN, SHP#}

FK {OWN} REFERENCES owner {OWN}
-- Point of sale number POS#,
-- of shop number SHP#, of owner OWN exists.
--
point_of_sale {OWN, SHP#, POS#}
           PK {OWN, SHP#, POS#}

FK {OWN, SHP#} REFERENCES shop {OWN, SHP#}
-- Item ITM exists.
--
item {ITM}
  PK {ITM}
-- Item ITM is available in shop
-- number SHP#, of owner OWN.
--
item_shop {ITM, OWN, SHP#}
       PK {ITM, OWN, SHP#}

FK1 {ITM} REFERENCES item {ITM}

FK2 {OWN, SHP#} REFERENCES shop {OWN, SHP#}
-- On DTE (date-time), item ITM was sold in
-- quantity QTY, thru point of sale number POS#,
-- of shop number SHP#, of owner OWN.
--
sales {OWN, SHP#, POS#, DTE, ITM, QTY}
   PK {OWN, SHP#, POS#, DTE, ITM}

      FK1 {ITM, OWN, SHP#} REFERENCES
item_shop {ITM, OWN, SHP#}

          FK2 {OWN, SHP#, POS#} REFERENCES
point_of_sale {OWN, SHP#, POS#}

注意:

All attributes (columns) NOT NULL

PK = Primary Key
FK = Foreign Key
Using suffix # to save on screen space.
OK for SQL Server and Oracle, for others use _NO.
For example, rename SHP# to SHP_NO.