回答
這通常被稱爲多對多關係。在標準關係型數據庫中,這通常用user_id
和shop_id
表代表,每個用戶 - >商店關係一行。
您不會希望使用逗號分隔的字符串來表示數據庫中的多個項目,因爲這會使查詢非常低效。例如,要查找用戶a
訂閱的商店,您必須解析表的每一行以查找哪些逗號分隔值包含a
。
我相信用戶可以訂閱多個商店,並且一個商店可以有多個用戶訂閱它。在這種情況下,最好使用來自商店表的shop_id
和來自用戶表的user_id
的地圖表。 (保持外鍵約束)。對於每個訂閱,此表將保留一個條目,因此不需要使用逗號分隔的字符串。
您可以創建一個表格,其中每一行表示訂閱(即一對(用戶,店鋪))。 所以,你會在表格中至少有兩列:商店的ID和用戶的ID。 假設用戶只能訂購一次商店,這個pair(user_id,shop_id)應該是表的主鍵(如果您需要爲表定義一個代理鍵,您可以添加一個唯一的約束pair(user_id,shop_id))。 如果您有許多數據並需要快速獲取用戶已訂閱的所有商店,則應該在user_id列中添加一個索引。 另一方面,如果您需要快速獲取訂閱商店的所有用戶,則應該在shop_id列中添加一個索引。
聽起來好像你在數據庫中有一個經典的情況,它標記了「平面文件」數據庫和「關係數據庫」(如MySQL,Oracle或MS的SQL Server)之間的變化。類似的情況是作者和書籍。一位作者可以有多本書,一些書有多個作者。
一個簡單的逗號分隔的數據庫是一個平面文件,你將需要爲每個關係單獨一行。例如,
SHOPA,用戶A ShopB,用戶A SHOPA,用戶B ShopB,用戶B
在關係數據庫中,可以隔離用戶表和商店表中兩個單獨的表,並形成一個第三表,一個關係表中描述的關係,因此在用戶和店鋪表中刪除冗餘,
ShopTable 雪巴,SA ShopB,SB
用戶表 用戶A,UA 用戶B,UB
ShopUserRelationTable SA,UA SA,UB SB,UA SB,UB
當你想顯示關係記錄,在應用SQL語言來創建序列顯示此記錄的記錄。
消除表中冗餘的這個基本問題是激發關係數據庫軟件開發的原因。
有時會發生這樣一個表,它足夠複雜以包含像這樣的「多對多」關係,SQL可以進一步應用於分析和創建反映這些關係的記錄。這樣的表格也可以用作其他表格的多對多關係表。
- 1. 臨時許可Play商店
- 2. Jedis許多用戶
- 3. 許多應用程序在iOs中使用一個商店
- 4. 商店belongsTo與許多關係w /條件 - Laravel
- 5. 需要建議處理許多應用內商店產品(StoreKit)
- 6. 許多用戶的symfony2 ACL
- 7. SQLAlchemy的許多到許多用戶,組,角色
- 8. 許多生產商的Kinesis碎片
- 9. 許多不工作的許多關係
- 10. Facebook的許多到許多領域
- 11. 客戶端服務器C++中的許多設計模型(許多用戶 - 許多應用程序)
- 12. 允許我的SAAS用戶在他們的商店安裝MailChimp
- 13. 許多
- 14. 角2 HTTP許多用戶
- 15. 模擬許多Android用戶
- 16. RabbitMQ中許多客戶端和許多服務器
- 17. 谷歌Play商店許可限制
- 18. magento customer.create,只允許一個商店?
- 19. 多商店多域名一次結帳,單個客戶登錄所有商店?
- 20. Kohana的ORM門店數量在許多一對多的關係
- 21. Ember.js訂單有許多孩子
- 22. 許多實例與許多std :: shared_ptr
- 23. Linq To Sql許多許多聯接表
- 24. 使用Git與許多,許多回購
- 25. LINQ與許多實體許多relatioship
- 26. SQL - 許多許多比特「虛擬」列?
- 27. 許多到許多實體框架
- 28. Azure Table定價 - 許多許多表
- 29. 許多對許多加入其中
- 30. .Htaccess mod_rewrite:許多RewriteCond許多RewriteRules爲Drupal
它實際上是一個多對多的關係。一對多不需要第三個表格。 –
沒錯,謝謝你 –